3
#include <iostream>
using namespace std;

class SomeClass {
public:
    bool someArray[4][4]={{0,0,0,0},{0,0,0,0}};
};

int main()
{
     SomeClass super;
     super.someArray={{1,1,1,0},{1,0,0,1}};  //This goes red, indicates a mistake. How do i properly fill it?

    for (int i=0;i<4;i++){
        for (int j=0;j<4;j++){
           cout<<super.someArray[i][j];
        }
        cout<<endl;
    }
return 0;
}

上記のコードのコメントを参照してください。ちなみに、 super.someArray[4][4]={{1,1,1,0},{1,0,0,1}};どちらも機能しません。おそらく機能しないはずです。

4

3 に答える 3

2
  1. おそらく使用するつもりですbool someArray[2][4](つまり、4 つのブール要素を持つ配列を含む 2 つの要素を持つ配列)。

  2. C++ では、ある配列を別の配列に割り当てることはできません。個々の要素をコピーする必要があります。つまり、次のようなものです。

    super.someArray[0][0] = 1; super.someArray[0][1] = 1; super.someArray[0][2] = 1; super.someArray[0][3] = 0; super.someArray[1][0] = 1; super.someArray[1][1] = 0; super.someArray[1][2] = 0; super.someArray[1][3] = 1;

(データのソースがある場合は、もちろんループを使用できます。)

于 2012-10-05T17:16:16.893 に答える
1

GNUコンパイラを使用すると、次のことがうまくいきました。生の配列を std::tr1::array に置き換えたことに注意してください。このクラスは、配列全体の割り当てに関してより柔軟です (リテラルから配列を初期化するだけではなく)。

#include <iostream>
#include <tr1/array>
using namespace std;
using namespace tr1;
typedef array<array<bool,4>,4> array4x4;

class SomeClass {
public:
    array4x4 someArray;
    SomeClass() : someArray((array4x4){{{{0,0,0,0}},{{0,0,0,0}}}}) {}
};

int main()
{
     SomeClass super;
     super.someArray=(array4x4){{{{1,1,1,0}},{{1,0,0,1}}}};  //Now works

    for (int i=0;i<4;i++){
        for (int j=0;j<4;j++){
           cout<<super.someArray[i][j];
        }
        cout<<endl;
    }
return 0;
}

ただし、次のアプローチは、開始した場所に少し近く、他のコメントで提案されていることのいくつかを示しています...

#include <iostream>
#include <algorithm>
using namespace std;

class SomeClass {
public:
    bool someArray[4][4];
    SomeClass()
       {
       bool temp[4][4] = {{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
       for ( int j=0; j<4; j++ ) for ( int i=0; i<4; i++ ) someArray[j][i] = temp[j][i];
       }
};

int main()
{
     SomeClass super;
       bool temp[4][4] = {{1,1,1,0},{1,0,0,1}}; // a local source of data
       for ( int j=0; j<4; j++ ) for ( int i=0; i<4; i++ ) super.someArray[j][i] = temp[j][i];

    for (int i=0;i<4;i++){
        for (int j=0;j<4;j++){
           cout<<super.someArray[i][j];
        }
        cout<<endl;
    }
return 0;
}
于 2012-10-05T18:04:42.097 に答える
1
super.someArray[4][4]={{1,1,1,0},{1,0,0,1}};

上記の行は次のようにする必要があります。

super.someArray[4][4]={1,1,1,0,1,0,0,1};

説明: 配列の次のセクションに自動的に移動します。これをテーブルと考えると、最初の行がいっぱいになると、次の行の宣言が開始されます。

したがって、次のように書いた場合:

super.someArray[4][4]={1,1,1,1,1}; 

次のように設定します。

someArray[0][0] 
someArray[0][1] 
someArray[0][2] 
someArray[0][3] 
someArray[1][0] 

すべて 1 に等しい。

(数字が入れ替わっている可能性があるため、xとyの場所が変更されている可能性があります。C ++については思い出せません)

于 2012-10-05T20:52:43.603 に答える