当我编写一个具有其他类'对象的类的构造函数时,如下例所示,我得到编译错误NaN
error: no matching function for call to 'A::A()'
我知道通过添加一个没有参数的A的构造函数(比如class A {
int x;
public:
A(int _x) {
this->x=_x; } };
class B {
A obj;
public:
B(int x) {
obj=A(x); } };
int main(){}
),我会解决问题,但还有另一种解决方法而不引入新的构造函数?
p.s。:我知道使用指向A类对象的A的指针,会解决,但我想知道是否有保持对象的方法。
答案 0 :(得分:1)
使用https://firebase.googleblog.com/2017/03/take-control-of-your-firebase-init-on.html。
对于无法进行默认初始化的成员,例如引用成员和const限定类型,必须指定成员初始值设定项。
class B {
A obj;
public:
B(int x) : obj(x) {}
};
对于您的代码,obj
将首先默认初始化,然后在构造函数体中分配。 A
无法默认初始化;这会导致错误。