Не удается заполнить массив, который является членом класса. Переполнение стека

#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}}; тоже не работает и, вероятно, не должно.

3

Решение

  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;

(Если у вас есть какой-то источник для ваших данных, вы можете использовать цикл, конечно.)

2

Другие решения

Следующее работало для меня, используя компилятор 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;
}
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};

Explaination:
он автоматически перейдет к следующему разделу массива. Если вы думаете о ней как о таблице, то после заполнения первой строки она начнет объявлять ее для следующей строки.

Так что, если вы написали:

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 ++)

1
По вопросам рекламы [email protected]