初始化 class 构造函数初始化列表中对象数组的第一个条目
Initialize first entries of an array of objects in class constructor initialization list
如果我有 class A 声明 Class B 并实例化它的数组。
class A{
class B{
int x, y;
};
B arrB[10];
public:
A();
};
然后,我的问题是我想初始化 Class 中 "arrB" 的前两个对象 A 使用初始化列表:
A::A(): arrB[0](1, 2), arrB[1](3, 4) {}
但是编译器不接受。
是否可以初始化数组的特定对象?如果是,怎么做?
谢谢
问题是 B
默认将其成员隐藏为 private
,因为它是 class
。声明 B
结构,或将 int x, y
公开为 public
以便能够使用聚合初始化:
class A{
class B{
public:
int x, y;
};
B arrB[10] = {{1,2}};
public:
A();
};
第二个问题是您没有正确使用聚合初始化。
A::A(): arrB[0](1, 2), arrB[1](3, 4) {}
应该是
A::A(): arrB{{1, 2}, {3, 4}} {}
Demo
为了在 class 成员初始化列表中初始化数组,您需要像在函数中初始化数组一样使用花括号。
因此,如果你想初始化数组的第一个和第二个元素,你至少需要使用
A() : arrB{{1,2}, {3,4}} {}
作为第一组 ({1,2}
) 说使 arrB[0]
一个 B 与 x
和 y
初始化为 1
和 2
分别。第二组 ({3,4}
) 表示将 arrB[1]
设为 B,其中 x
和 y
分别初始化为 3
和 4
。
你必须做一件事才能完成这项工作。您要么需要制作 B
并通过制作 x
和 y
public 进行聚合,或者您可以为 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;
}
如果我有 class A 声明 Class B 并实例化它的数组。
class A{
class B{
int x, y;
};
B arrB[10];
public:
A();
};
然后,我的问题是我想初始化 Class 中 "arrB" 的前两个对象 A 使用初始化列表:
A::A(): arrB[0](1, 2), arrB[1](3, 4) {}
但是编译器不接受。
是否可以初始化数组的特定对象?如果是,怎么做?
谢谢
问题是 B
默认将其成员隐藏为 private
,因为它是 class
。声明 B
结构,或将 int x, y
公开为 public
以便能够使用聚合初始化:
class A{
class B{
public:
int x, y;
};
B arrB[10] = {{1,2}};
public:
A();
};
第二个问题是您没有正确使用聚合初始化。
A::A(): arrB[0](1, 2), arrB[1](3, 4) {}
应该是
A::A(): arrB{{1, 2}, {3, 4}} {}
Demo
为了在 class 成员初始化列表中初始化数组,您需要像在函数中初始化数组一样使用花括号。
因此,如果你想初始化数组的第一个和第二个元素,你至少需要使用
A() : arrB{{1,2}, {3,4}} {}
作为第一组 ({1,2}
) 说使 arrB[0]
一个 B 与 x
和 y
初始化为 1
和 2
分别。第二组 ({3,4}
) 表示将 arrB[1]
设为 B,其中 x
和 y
分别初始化为 3
和 4
。
你必须做一件事才能完成这项工作。您要么需要制作 B
并通过制作 x
和 y
public 进行聚合,或者您可以为 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;
}