是否可以使用 for 循环在构造函数中声明一个二维数组 class 成员?

Is it possible to declare a 2d array class member inside the constructor with a for loop?

目前我有这个

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

现在的情况告诉我,我需要一个字段的默认构造函数。我正在尝试完成在不同位置初始化每个位置。我这样做完全错了吗?我见过向量方法的向量。如果可能的话,我想避免这种情况,因为它之前对我不起作用。

我在一定程度上猜测这里,但试试这个:

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
}

第一个构造函数将是您的默认构造函数,因为它没有参数。

希望对您有所帮助。抱歉,如果我 miss-understood 你的问题。

更新

备选方案是:

这在header:

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 class,我看不出合适的声明是什么。使用最后一种方法,构造函数如何为每个参数提供默认值。

有关详细信息,请参阅此 default constructor 主题。它部分提到: