我有以下示例代码
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 available
为obj
您可以在构造函数初始化列表中初始化成员。像这样:
ClassA() : obj(someInt) { }
仅需要创建classA对象,然后才能调用ClassA类。
最适合您的设计解决方案是像这样在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