类组合中的构造函数错误

error in constructor in class composition

本文关键字:构造函数 错误 组合      更新时间:2023-10-16

当我编写具有其他类对象的类的构造函数时,如下例所示,我得到编译错误error: no matching function for call to '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(){}

我知道通过添加没有参数的 A 构造函数(如 A(){} (,我会解决问题,但是还有另一种方法可以在不引入新构造函数的情况下解决问题?

p.s.:我知道使用指向 A 的指针而不是类 A 的对象可以解决,但我想知道是否有办法保留该对象。

使用成员初始值设定项列表。

对于无法默认初始化的成员(如引用和常量限定类型的成员(,必须指定成员初始值设定项。

class B {
    A obj;
public:
    B(int x) : obj(x) {}
};

对于代码,obj将首先默认初始化,然后在构造函数的主体中分配。 A不能默认初始化;这会导致错误。