Чтобы инициализировать массив в списке инициализации члена класса, вам нужно использовать фигурные скобки, как если бы вы инициализировали массив в функции.
Таким образом, если вы хотите инициализировать первый и второйэлемент массива, который вам нужно будет использовать как минимум
A() : arrB{{1,2}, {3,4}} {}
, так как первый набор ({1,2}
) говорит, что make arrB[0]
a B с x
и y
, инициализированными 1
и2
соответственно.Второй набор ({3,4}
) говорит, что make arrB[1]
a B с x
и y
инициализированы соответственно 3
и 4
.
Вы должны сделать одну вещь, хотя в порядкечтобы сделать эту работу.Вам нужно либо сделать B
и агрегировать, сделав x
и y
общедоступными, либо вы можете предоставить конструктор для B
, который принимает значения.Это позволяет вам иметь либо
class A{
class B{
public:
int x, y;
};
B arrB[10];
public:
A() : arrB{{}, {3,4}} {}
};
int main() {
A a;
}
или
class A{
class B{
int x, y;
public:
B() : x(), y() {} // need this so default instances are value initialized (zeroed in this case)
B(int x, int y) : x(x), y(y) {}
};
B arrB[10];
public:
A() : arrB{{}, {3,4}} {}
};
int main() {
A a;
}