是否可以使用for循环在构造函数内声明一个2d数组类成员?

时间:2016-05-15 19:42:12

标签: c++ arrays constructor 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);
        }
};

它现在的方式告诉我,我需要一个字段的默认构造函数。我试图在不同的位置初始化每个位置。我这样做完全错了吗?我已经看到了矢量矢量的方法。如果可能的话,我想避免这种情况,因为它之前并没有为我工作。

1 个答案:

答案 0 :(得分: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