我正在制作一个垄断游戏,我有两个Vector数组,用于我的2d字符数组的坐标。下面是我的board.h,其中数组保存在板类
中class Board {
...
Vector propList[40];
Vector coordList[40];
...
public:
...
};
我在尝试创建可执行文件时在bash中运行我的程序时出错,如下所示(每个数组有2个相同的错误)
board.cc:15:8: error: constructor for 'Board' must explicitly initialize the member 'propList' which does not have a default constructor
Board::Board() {
^
./board.h:17:12: note: member is declared here
Vector propList[40];
我在我的电路板构造函数中初始化了所有40个元素,如下所示
propList[0] = Vector(-1, -1);
propList[1] = Vector(73, 51);
...
propList[39] = Vector(81, 46);
coordList[0] = Vector(81, 54);
coordList[1] = Vector(73, 54);
...
我也试过以下
Vector v = (-1, 1);
propList[0] = v;
...
并收到相同的错误。有谁知道发生了什么以及如何解决它?
编辑:我忘了添加矢量代码了。我不得不创建一个构造函数,因为我不能在我的计算机上使用C ++ 11初始化。
vector.cc
#include "vector.h"
Vector::Vector(int x, int y) : x(x), y(y) {}
vector.h
struct Vector {
Vector(int x, int y);
int x;
int y;
};
答案 0 :(得分:1)
在构造函数中,这些是赋值,而不是初始化。构造函数具有专门用于此目的的初始化列表。不幸的是,你不能像这样初始化数组。
以下是简单int
成员的初始化列表:
class MyClass
{
int myField;
MyClass() :
m_myField(1)// initialization
{
// right here, myField is 1.
myField = 2;// assignment.
}
};
这个将 myField
初始化为1.然后分配2,就像你在构造函数中所做的一样。
你不能像这样初始化数组,所以我建议一个解决方法:std::vector
Vector
。是的,这让人感到困惑,因为它们都被称为“矢量”,但它们意味着不同的东西。 std::vector
是一个存储容器。
std::vector<Vector> propList;
并在构造函数中,将Vector
个对象添加到propList
Board::Board()
{
propList.push_back(Vector(-1, -1));
propList.push_back(Vector(73, 51));
...
}
另一种解决方案是向Vector
添加默认构造函数。但与使用std::vector<>
相比,这有点脏。
在C ++ 11中,可以在构造函数初始化列表中使用聚合初始化。 不,这是不可能的,期间。