2016-05-15 10 views
0

Zur Zeit habe ich diesen
Ist es möglich, ein 2d-Array-Klassenmitglied im Konstruktor mit einer for-Schleife zu deklarieren?

//gameboard.h 

class GameBoard 
{ 
public: 
    GameBoard(bool showShips); 
    ~GameBoard(); 
    void draw(); 
    void placeShipStart(int x, int y); 
    void placeShipEnd(int ship, int x, int y); 
private: 
    bool defaultShowShips; 
    Field playerBoard[10][10]; 
    vector<Ship*> ships[5]; 
}; 

//gameboard.cpp 

GameBoard::GameBoard(bool showShips) 
{ 
    defaultShowShips = showShips; 
    for (int i = 0; i < 10; i++) 
     for (int j = 0; j < 10; j++) 
     { 
      xyzCoord ul, lr; 
      ul.x = j * 5.0f; 
      ul.y = i * 5.0f; 
      ul.z = 2.0f; 
      lr.x = j * 5.0f + 5.0f; 
      lr.y = i * 5.0f + 5.0f; 
      lr.z = 0.0f; 
      playerBoard[i][j] = Field(ul, lr); 
     } 
}; 

so, wie es jetzt ist es mir zu sagen, dass ich ein Standard-Konstruktor für das Feld haben muß. Ich versuche, jede Position in einer anderen Position zu initialisieren. Mache ich das völlig falsch? Ich habe den Vektor der Vektoren gesehen. Wenn möglich, möchte ich das vermeiden, weil es früher nicht für mich funktionierte.

+0

Können wir Ihre 'Field' Klasse finden Sie? Wenn ** Standardkonstruktor ** angegeben ist, bedeutet dies, dass alle in der Konstruktorfunktionsdeklaration deklarierten Variablen mit ** Standardwerten ** versehen sein müssen. Ich sehe, dass dein 'Field'-Konstruktor mindestens 2 Parameter vom Typ' xyzCoord' hat. Stellen Sie also entweder Standardwerte in der Parameterliste bereit (ich kann Sie anzeigen, wenn ich Ihre Klasse sehe). Oder fügen Sie einen zweiten Konstruktor hinzu, der keine Parameter akzeptiert. –

+0

Ist es nicht möglich, diese Werte ohne Verwendung eines Standardkonstruktors zu initiieren? Wie kann ich den Raum zuordnen und dann jeden einzeln konstruieren? –

+0

Siehe meine aktualisierte Antwort. Es wäre hilfreich, die Konstruktoren für xyzCoord zu sehen. –

Antwort

0

ich hier bis zu einem gewissen Grad bin zu raten, aber versuchen Sie dies:

Field::Field() 
{ 
    // Provided default values to your two member variables 
} 

Field::Field(xyzCoord ul, xyzCoord lr) 
{ 
    // Populate your two member variables with the passed in values 
} 

Der erste Konstruktor Ihr Standard sein wird, da es keine Parameter hat.

Ich hoffe, das hilft. Entschuldigung, wenn ich deine Frage nicht verstanden habe.

aktualisieren

Die Alternative ist:

Diese in der Kopfzeile:

Field::Field(xyzCoord ul = xyzCoord(), xyzCoord lr = xyzCoord()) 

Das in der Quelle:

Field::Field(xyzCoord ul /*xyzCoord()*/, xyzCoord lr /*xyzCoord()*/) 
{ 
    // Populate your two member variables with the passed in values 
} 

ich die Prinzipien bin vermitteln. Ohne die Field- und xyzCoord-Klasse zu sehen, kann ich nicht sehen, was die passenden Deklarationen wären. Mit diesem letzten Ansatz liefert der Konstruktor Standardwerte für jeden Parameter.

Weitere Informationen finden Sie in diesem Thema default constructor Thema. Im ersten Teil erwähnt es:

constructors

+0

Ich möchte vermeiden, in der Lage zu sein, ein Field-Objekt ohne die Ul und Irs zu erstellen. Ist es möglich oder belle ich den falschen Baum an? Ich möchte diese Werte im Konstruktor des Spielbretts initiieren. –

+0

@VincentJenkins Ich habe meine Antwort aktualisiert, um Ihnen zu zeigen, wie Sie Ihren Konstruktor verwenden und Standardwerte bereitstellen können. –