2016-05-15 74 views
0

目前我有这个
是否有可能在构造函数中用for循环声明2d数组类成员?

//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'类型的参数。因此,要么在参数列表中提供默认值(我可以在看到您的课程时向您显示)。或者添加第二个不带参数的构造函数。 –

+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我已经更新了我的回复,向您展示如何使用您的构造函数并提供默认值。 –

相关问题