类组合中构造函数中的错误

时间:2018-01-23 15:31:00

标签: c++ class

当我编写一个具有其他类'对象的类的构造函数时,如下例所示,我得到编译错误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的指针,会解决,但我想知道是否有保持对象的方法。

1 个答案:

答案 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无法默认初始化;这会导致错误。