在C ++类中创建二维向量

时间:2011-04-23 00:22:47

标签: c++ class vector

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

错误:数字常量之前的预期标识符 错误:在数字常量之前预期','或'...'

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

};

5 个答案:

答案 0 :(得分:2)

您无法在声明成员变量的位置初始化它们。在构造函数中使用初始化列表:

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

答案 1 :(得分:2)

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)
{
  // ...
};

希望有所帮助。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您不能将可变成员初始化为类定义本身的一部分。而是 do 在构造函数中分配它。

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

答案 4 :(得分:0)

您应该在类构造函数中初始化成员,而不是声明。以下似乎没有任何正确的方法:

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

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