Я хочу использовать двумерный массив постоянного размера как член класса в C++. Однако у меня проблемы с инициализацией в конструкторе.C++: инициализация многомерного массива в конструкторе
Вот мои неработающие попытки:
1.)
class A {
public:
int a[2][2];
A();
};
A::A() {
a = {{1,2},{2,4}};
}
Урожайность: error: assigning to an array from an initializer list
2.)
class A {
public:
int a[2][2];
A();
};
A::A() {
int b[2][2] = {{1,2},{2,4}};
a = b;
}
Урожайность: invalid array assignment
3.)
class A {
public:
int **a;
A();
};
A::A() {
int b[2][2] = {{1,2},{2,4}};
a = b;
}
выходы: cannot convert ‘int [2][2]’ to ‘int**’ in assignment
Я родом из C фоне. Я знаю, что могу использовать std::vector
, и я знаю об этом недостатках, но поскольку это упражнение для меня, я хотел бы знать, как заставить его работать с обычными массивами. Я должен добавить, что я хочу продолжить работу над этим массивом позже. Я хочу изменить сохраненные значения, но не размер. Возможно, это имеет значение (я понял, что const
в нужном месте может помочь?).
Как я понимаю, используемый здесь синтаксис является нестандартным, расширением языка g ++. –
@ Cheersandhth.-Alf Я тестировал это как gcc, так и clang, используя '-std = C++ 11' (в отличие от' std = gnu11'), и оба приняли его. 'clang' отклонил' a ({{1,2}, {3, 4}}) 'хотя в качестве расширения GNU. – pmr
@ Cheersandhth.-Alf Попробуйте скомпилировать этот код и свой флаг '-pedantic-errors' и ... – Constructor