是否可以使用 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 主题。它部分提到:
目前我有这个
//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 主题。它部分提到: