【问题标题】:C++ array in class not initializing properly类中的 C++ 数组未正确初始化
【发布时间】:2014-11-30 23:27:36
【问题描述】:

我正在制作一个垄断游戏,我有两个向量数组作为我的二维字符数组的坐标。下面是我的 board.h,其中数组保存在 board 类中

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

【问题讨论】:

  • 您的Vector 类需要将参数传递给构造函数。
  • 错误消息中的“...which doesn't have a default constructor”部分是否不够清楚? Vector 没有默认构造函数。它需要一个,或者您需要一种不同的初始化方法。
  • @WhozCraig 抱歉,我没有添加我的矢量代码。我需要创建一个构造函数,因为我不能使用 c++11 初始化。

标签: c++ arrays constructor


【解决方案1】:

在您的构造函数中,这些是赋值,而不是初始化。构造函数有一个专门用于此目的的初始化列表。不幸的是,你不能像这样初始化数组。

这是一个简单的int 成员的初始化列表:

class MyClass
{
    int myField;

    MyClass() :
        m_myField(1)// initialization
    {
        // right here, myField is 1.
        myField = 2;// assignment.
    }
};

初始化 myField 为 1。然后分配 2,就像您在构造函数中所做的那样。

你不能像这样初始化数组,所以我建议一个解决方法:std::vectorVectors。是的,这很令人困惑,因为两者都被称为“向量”,但它们的含义不同。 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&lt;&gt; 相比有点脏。


在 C++11 中,可以在构造函数初始化列表中使用聚合初始化。 不,这是不可能的,句号。

【讨论】:

  • 这是对棋盘的描述还是比赛状态?垄断板是 Vector 的静态 const 数组的主要候选者,它当然可以进行列表初始化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多