感谢所有帮助,我已将初始化移至构造函数,但是,我在定义2D向量时遇到困难:
这就是我所做的:
private:
vector < vector <int> > Matrix;
vector < vector <int> > temp_m;
vector <int> elements
string input;
int value;
function()
{
//Initialize Both Matrices (one which holds the puzzle and the
//other which holds the values between 1 and 9
//Create a vector of vectors:
for(int i = 0; i < 9; i++)
elements.push_back(i+1);
for(int i = 0; i < 9; i++)
Matrix[i].push_back(elements); //ERROR HERE
}
我在定义2D矩阵的行中出现错误。我想将矩阵推回到其索引中,因为它是一个矩阵矩阵。
答案 0 :(得分:4)
“行”的声明及其构造不在同一个地方。构造属于初始化列表:
class MyClass
{
public:
MyClass::MyClass()
: row(9,0), elements(9)
{
}
private:
vector < vector <int> > Matrix;
vector < vector <int> > temp_m;
vector <int> row;
vector <int> elements;
string input;
int value;
}
如果您对成员变量有任何其他特殊大小或初始化,则需要构造参数(例如上面的Matrix和temp_e)也属于初始化列表。
答案 1 :(得分:2)
这是不合法的(无论如何,在C ++ 11之前是无效的,C ++ 11中有变化,但我不确定具体的规则)。您可以在构造函数初始化列表中指定它:
A::A() : row(9, 0), elements(9) {}
并改为:
private:
vector<int> row;
vector<int> elements;
答案 2 :(得分:2)
尝试从声明中删除(9 , 0)
。在C ++中,您不能从类变量声明中调用构造函数。您需要使用初始化列表从类构造函数中执行此操作。