我有一个关于构造函数的问题。我有两个类(MyClass1,MyClass2)。
MyClass1.h
class MyClass1 {
public:
MyClass1();
...
private:
MyClass2 object;
...
}
MyClass1.cpp
#include "MyClass1.h"
MyClass1::MyClass1() { //This constructor causes the error!!!
object = MyClass2(1000);
...
}
...
MyClass2.h
class MyClass2 {
public:
MyClass2(int);
...
private:
int id;
...
}
MyClass2.cpp
#include "MyClass2.h"
MyClass2::MyClass2(int id) {
this->id = id;
...
}
...
在创建'MyClass1‘的实例时,我收到以下错误消息:
error C2512: 'MyClass2': no appropriate default constructor available
发布于 2017-07-29 20:07:35
在object
需要默认构造之前,您试图在构造函数的主体内分配object
,但MyClass2
没有默认构造函数。
您应该使用member initializer list来指定应该使用哪个构造函数来初始化object
。
在构成构造函数函数体的复合语句开始执行之前,所有直接基、虚拟基和非静态数据成员的初始化都已完成。成员初始值设定项列表是可以指定这些对象的非默认初始化的位置。
例如:
MyClass1::MyClass1() : object(1000) {
}
发布于 2017-07-29 20:08:02
错误是,当进入构造函数的主体时,每个成员都应该被构造和初始化。因为对于MyClass2
编译器的抱怨,tehre是没有可用参数的ctor。
初始化成员对象的语法为:
MyClass1::MyClass1() : object(1000) {}
https://stackoverflow.com/questions/45389088
复制相似问题