是否可以使用 for 循环在构造函数中声明二维数组类成员?
Posted
技术标签:
【中文标题】是否可以使用 for 循环在构造函数中声明二维数组类成员?【英文标题】:Is it possible to declare a 2d array class member inside the constructor with a for loop? 【发布时间】:2016-05-15 19:42:11 【问题描述】:目前我有这个
//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
课程吗?当它说 default constructor 时,意味着在构造函数声明中声明的所有变量都必须提供 default 值。我看到您的Field
构造函数至少有两个xyzCoord
类型的参数。所以,要么在参数列表中提供默认值(我可以在看到你的类时告诉你)。或者添加第二个不带参数的构造函数。
不使用默认构造函数就不能初始化这些值吗?像我可以分配空间然后单独构建每个空间吗?
查看我的更新答案。查看 xyzCoord 的构造函数会有所帮助。
【参考方案1】:
我在某种程度上猜测这里,但试试这个:
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 主题。它部分提到:
【讨论】:
我想避免在没有 ul 和 lr 的情况下创建 Field 对象。有可能还是我在叫错树?我想在游戏板的构造函数中初始化这些值。 @VincentJenkins 我已经更新了我的回复,向您展示如何使用您的构造函数并提供默认值。以上是关于是否可以使用 for 循环在构造函数中声明二维数组类成员?的主要内容,如果未能解决你的问题,请参考以下文章