Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在类C+中创建二维向量+;_C++_Class_Vector - Fatal编程技术网

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

C++ 在类C+中创建二维向量+;,c++,class,vector,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(

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

错误:数字常量前应有标识符 错误:数字常量前应为“,”或“…”

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

};
使用名称空间std;
类网格{
公众:
网格();
无效显示网格();
无效输出网格();
私人:
向量行(5,0);
矢量拼图(9行);
int行;
int列;
};

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

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

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

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

// ....
Grid()
{
     row.resize(5,0) ;
     puzzle.resize(9,row) ;
}
private:
   vector<int> row;
   vector<vector<int> > puzzle ;
// ..
/。。。。
网格()
{
行。调整大小(5,0);
拼图。调整大小(第9行);
}
私人:
向量行;
矢量拼图;
// ..

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

vector<int> row(5, 0);
vector<vector<int> > puzzle(9, row);
向量行(5,0);
矢量拼图(9行);

如果
拼图
是函数,则参数应为类型。如果它们是成员变量,请在类构造函数中初始化它们。

C++类定义受到限制,因为不能在声明成员的行中初始化成员。这是一个遗憾,但它在某种程度上在C++0x中得到了修复

// ....
Grid()
{
     row.resize(5,0) ;
     puzzle.resize(9,row) ;
}
private:
   vector<int> row;
   vector<vector<int> > puzzle ;
// ..
无论如何,您仍然可以使用
ctor初始值设定项
语法提供构造函数参数。您可能以前没有见过,但是:

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

   int x;
};
是您初始化成员的方式,您以前可能使用
intx=42尝试过(但失败)

因此:

类网格{
公众:
网格();
无效显示网格();
无效输出网格();
私人:
向量行;
矢量拼图;
int行;
int列;
};
网格::网格()
:第(5,0)行
,拼图(第9排)
{
// ...
};

希望有帮助。

它们的功能如何?它们是对象,它们是用参数构造的(或者说这就是意图)。我知道这就是意图,我指出语法是错误的。在类成员的定义中使用括号是为了函数。@Tomalak-我对赋值和初始化这两个术语感到困惑。OP正在做什么的正确术语是什么?我也不认为这是任务。OP正在尝试初始化。您的代码与您对完全构造的对象调用函数不同(尽管这里的最终结果实际上是相同的),而不是传递构造函数参数。@Tomalak-如果我的回答把它说成是一个初始化,我很抱歉。这样说是不正确的。:)你演示的方法当然是有效的,如果你有C++的一些基本知识,这将是有帮助的。例如,如何初始化类成员数据。