1

感谢所有帮助,我已将初始化移至构造函数,但是,我在定义 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 矩阵的行中遇到错误。我想将矩阵推回其索引,因为它是矩阵的矩阵。

4

3 回答 3

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)它们也属于初始化列表。

于 2012-09-26T21:39:59.537 回答
2

尝试(9 , 0)从声明中删除。在 C++ 中,不能从类变量声明中调用构造函数。您将需要使用初始化列表从类构造函数中执行此操作。

于 2012-09-26T21:41:26.353 回答
2

这是不合法的(无论如何肯定是在 C++11 之前,C++11 发生了变化,但我不确定确切的规则)。您可以在构造函数初始化程序列表中指定它:

A::A() : row(9, 0), elements(9) {}

并更改为:

private:
    vector<int> row;
    vector<int> elements;
于 2012-09-26T21:40:24.327 回答