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

これは合法ではありません(とにかくC ++ 11より前のことですが、C ++ 11に変更がありましたが、正確なルールはわかりません)。代わりに、コンストラクタ初期化子リストで指定できます。

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

次のように変更します。

private:
    vector<int> row;
    vector<int> elements;
于 2012-09-26T21:40:24.327 に答える
2

(9 , 0)宣言からを削除してみてください。C ++では、クラス変数宣言からコンストラクターを呼び出すことはできません。初期化子リストを使用して、クラスコンストラクターからこれを行う必要があります。

于 2012-09-26T21:41:26.353 に答える