2011-02-09 11 views
0

私はクラスのプライベートメンバーの一部を宣言した2D配列を持っています。コンストラクタを呼び出すと、2D配列に値を代入します。しかし、私がそうするたびに、私はエラーC2059で命中した。他に何もそのエラーを引き起こしていないことを確認するために、私はその行をコメントアウトし、コンパイラはバイナリファイルをまとめました。C++クラス、コンストラクタの初期化中に値を代入する

tried: 
Variable[row] = { 0, 1, 2, 3}; 
Variable[row][] = { 0, 1, 2, 3}; 
Variable[row][4] = { 0, 1, 2, 3}; 

いいえ、手がかりはありません。前もって感謝します。

+2

「C2059」エラーとは何ですか?確かに、私はそれをグーグルすることができますが、私はグーグルかあなたの質問に答えるべきですか? – delnan

+1

'Variable'の宣言を追加できますか? – fouronnes

+1

また、 'row'の宣言も – Loghorn

答えて

1

残念ながら、クラスのメンバーである配列を正しく初期化することはできません。私はあなたのことがどのように宣言されたのか正確には分かりませんが、何をすべきかの例です:

class X 
{ 
    int Variable[3][4]; 

public: 
    X() 
    { 
     const int temp[][4] = { { 1, 2, 3, 4}, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } }; 
     const int sz = sizeof(Variable)/sizeof(**Variable); 
     std::copy(*temp, (*temp) + sz, *Variable); 
    } 
}; 
3

この構文は、オブジェクトの作成にのみ使用されます。

int array[4] = {1, 2, 3, 4}; 

アレイが作成されたら、値を割り当てるためにループを使用する必要があります。ここで

は短い例です:

class A 
{ 
    int array[4]; 

    public: 
    A() 
    { 
     // Here, array is already created 
     // You can _assign_ values to it 
    } 
}; 

あなたはそれがコンストラクタでをインスタンス化だとき、それは値与えたい場合は、唯一の方法は、初期化リストを使用することです。残念ながら、静的配列ではこれを行うことはできません。

このthis thread.

+0

としてください。拡張配列初期化子もC++ 0xで利用できます... – Errata

0

を参照してくださいあなたの質問は十分に明確ではないので、私にできることはすべて、簡単な例を実証しています。

2D配列は次のように初期化され、

//you may "optionally" provide the size of first dimension 
int arr[][4] = { 
      {1,2,3,4}, 
      {11,12,13,14}, 
      {21,22,23,24} 
     }; 

としてacessedされ、ideoneで

for (int i = 0 ; i < 3 ; ++i) 
{ 
     for (int j = 0 ; j < 4 ; ++j) 
     { 
      cout << arr[i][j] << endl; 
     } 
} 

オンラインデモ:あなたは同様にhttp://www.ideone.com/KmwOg

をやっていますか?