编译vector类的私有成员时出错 - C ++

时间:2018-02-12 01:52:52

标签: c++ class vector

我正在为Minesweeper游戏创建一个类。该类不带任何参数。私人会员在课堂上宣传。我的目标是初始化一个二维向量的int。

using namespace std;

class Minesweeper {
public:
    //This class takes no parameters
    //Other methods will be here

private:
    int rows = 20;
    int cols = 20;
    vector < vector <int>> theBoard(rows, vector<int>(cols));
};

我收到的编译错误如下:(两者都在向量初始化的行中)

  1. 找不到“theBoard”的功能定义
  2. 成员“Minesweeper :: rows”不是类型名称
  3. 我不明白上述错误。我相信我在创建二维向量时使用了正确的语法。将不胜感激任何帮助。

2 个答案:

答案 0 :(得分:2)

在您的班级中添加构造函数。例如,

class Minesweeper
{
    public:
        Minesweeper()
        : rows(20),
          cols(20),
          theBoard(rows, vector<int>(cols))
        {

        }

    private:
        int rows, cols;

        vector<vector<int>> theBoard;
};

答案 1 :(得分:0)

这是一个&#34; MVP&#34; (最令人烦恼的解析)例子。有关该问题的更多信息,请参阅此问题已被复制的问题。

但是,我仍然在这里就如何正确初始化theBoard给出答案,因为通常情况下,你会写这个:

vector<vector<int>> theBoard{rows, vector<int>{cols}};

但这不起作用,因为在使用初始化列表时,rows无法隐式转换为size_t。所以你需要这个:

vector<vector<int>> theBoard{static_cast<size_t>(rows), vector<int>{cols}};

您可以将rowscolsint改为size_t,但不建议使用size_t(或无符号整数)一般而言)数量。 (vector使用无符号整数作为其大小几乎是C ++中的语言缺陷,现在无法修复,因为它会破坏太多代码。)