类中的C ++数组没有正确初始化

时间:2014-11-30 23:27:36

标签: c++ arrays constructor

我正在制作一个垄断游戏,我有两个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;
};

1 个答案:

答案 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中,可以在构造函数初始化列表中使用聚合初始化。 不,这是不可能的,期间。