2016-05-15 10 views
0

は現在、私はそれが今、それは私に言っています、私はフィールドのデフォルトコンストラクタを持っている必要があるということです。この
2d配列のクラスメンバーをforループでコンストラクタ内で宣言することは可能ですか?

//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); 
     } 
}; 

方法を持っています。私は別の位置で各位置の初期化を達成しようとしています。私はこれを完全に間違っているのですか?私はベクトルのベクトルのアプローチを見てきました。可能であれば、それは以前の私のために働いていなかったので、私はそれを避けたいと思います。

+0

私たちはあなたの 'Field'クラスを参照してくださいことはできますか? **デフォルトのコンストラクタ**と書かれているときは、コンストラクタの関数宣言で宣言されたすべての変数に**デフォルトの**値が与えられなければならないことを意味します。あなたの 'Field'コンストラクタには少なくとも2つのパラメータが' xyzCoord'型であることがわかります。したがって、パラメータリストにデフォルト値を指定するか(クラスが表示されたときに表示できます)。または、パラメータを取らない2番目のコンストラクタを追加します。 –

+0

デフォルトのコンストラクタを使用せずにこれらの値を初期化することはできませんか?私は空間を割り当てて、それぞれを個別に構築することができますか? –

+0

私の更新された回答を参照してください。 xyzCoordのコンストラクタを見れば助けになります。 –

答えて

0

私はある程度、ここで推測するが、これを試しています:それはパラメータはありませんよう

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 
} 

最初のコンストラクタがデフォルトになります。

こちらがお役に立てば幸いです。私があなたの質問を逃したなら、謝罪します。

更新

代替である:ヘッダー内

これ:

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

このソースで:

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

私は原則を搬送しています。 FieldとxyzCoordクラスを見ることなく、適切な宣言が何であるかはわかりません。この最後のアプローチでは、コンストラクターは各パラメーターのデフォルト値を提供します。

詳細については、default constructorトピックを参照してください。一部では言及:

constructors

+0

私は、ulとlrのないFieldオブジェクトを作成できないようにしたいと考えています。それは可能ですか、私は間違った木を鳴らしていますか?私は、ゲームボードのコンストラクタでこれらの値を開始したいと思います。 –

+0

@VincentJenkinsコンストラクタをどのように使用してデフォルト値を提供するかを示すために私の応答を更新しました。 –

関連する問題