我需要创建一个充满整数的向量向量。但是,我不断得到错误:
错误:数字常量之前的预期标识符 错误:在数字常量之前预期','或'...'
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_;
};
答案 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);
如果row
和puzzle
是函数 - 参数应该是类型。如果它们是成员变量 - 在类构造函数中初始化它们。