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](即,具有两个元素的数组,其中包含具有四个布尔元素的数组)。

  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 回答