如何处理没有默认构造函数但在另一个构造函数中构造的对象?

问题描述 投票:0回答:3

我有以下示例代码

class ClassB {
    public:
    ClassB(int i); // No default constructor
}

class ClassA {
    ClassB obj; //NOT a pointer
    public 
    ClassA() {
        //calculate someInt;
        obj = ClassB(someInt); // doesnt work
    }

}

如何初始化obj?编译器抱怨no appropriate default constructor availableobj

c++ constructor default-constructor
3个回答
1
投票

您可以在构造函数初始化列表中初始化成员。像这样:

ClassA() : obj(someInt) { }

0
投票

仅需要创建classA对象,然后才能调用ClassA类。


0
投票

最适合您的设计解决方案是像这样在obj中初始化成员initialization list

ClassA() : obj(someInt) { }

但是,您的另一种选择是像这样声明ClassB的默认构造函数:

ClassB() {}

或干脆让编译器通过使用以下代码为您创建一个:

ClassB() = default;

根据C ++标准,这是:

默认默认构造函数:编译器将定义隐式默认构造函数,即使存在其他构造函数。

如果您选择第二个选项,那么以下代码将通过而不会出现错误:

#include <iostream>

class ClassB {
public:
    ClassB() = default;
    ClassB(int i);
};

class ClassA {
    ClassB obj;
public: 
    ClassA() {
        int someInt = 0;
        obj = ClassB(someInt);
    }
};

int main() {

    return 0;
}

签出live

© www.soinside.com 2019 - 2024. All rights reserved.