在c++类中创建二维矢量

Creating 2-dimensional vector in class C++

本文关键字:二维 c++ 创建      更新时间:2023-10-16

我需要创建一个充满整数的向量的向量。然而,我不断得到错误:

错误:数值常量前的预期标识符错误:预期','或'…

using namespace std;
class Grid {
  public:
  Grid();
  void display_grid();
  void output_grid();
  private:
  vector<int> row(5, 0);
  vector<vector<int> > puzzle(9, row);
  int rows_;
  int columns_;
};

不能在声明成员变量的地方初始化它们。在构造函数中使用初始化列表:

Grid::Grid()
  : row(5,0), puzzle(9, row),
    rows_(5), columns_(9)
{
}

c++类定义是有限制的,不能在声明成员的地方内联地初始化成员。这是一个遗憾,但它在c++ 0x中得到了一定程度的修复。

无论如何,您仍然可以使用ctor-initializer语法提供构造函数参数。你可能以前没有见过它,但是:

struct T {
   T() : x(42) {
      // ...
   }
   int x;
};

是如何初始化成员的,当你之前可能已经尝试过(并且失败了)int x = 42;

:

class Grid {
  public:
  Grid();
  void display_grid();
  void output_grid();
  private:
  vector<int> row;
  vector<vector<int> > puzzle;
  int rows_;
  int columns_;
};
Grid::Grid()
  : row(5, 0)
  , puzzle(9, row)
{
  // ...
};

希望对你有帮助。

你不能在类声明中初始化成员,除非它是const static,因为在c++中,当你声明一个类时,没有代码正在运行/生成。您必须在构造函数中初始化它们。

应该在类构造函数中初始化成员,而不是在声明中初始化。以下内容似乎有任何不对的地方:

vector<int> row(5, 0);
vector<vector<int> > puzzle(9, row);

rowpuzzle为函数时,参数应为类型。如果它们是成员变量-在类构造函数中初始化它们

不能将可变成员初始化为类定义本身的一部分。在构造函数中赋值

// ....
Grid()
{
     row.resize(5,0) ;
     puzzle.resize(9,row) ;
}
private:
   vector<int> row;
   vector<vector<int> > puzzle ;
// ..