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++的一些基本知识,这将是有帮助的。例如,如何初始化类成员数据。