错误C2512:没有适当的默认构造函数可用:使用参数声明对象!构造
问题描述:
里面我有一个构造函数的一个问题。 我有两个类(MyClass1,MyClass2)。错误C2512:没有适当的默认构造函数可用:使用参数声明对象!构造
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
答
你试图分配object
构造体内,在这之前object
必须是缺省构造,但MyClass2
没有按没有默认的构造函数。
您应该使用member initializer list指定哪个构造应该被用来初始化object
。
在形成构造函数体的复合语句开始执行之前,完成所有直接基础,虚拟基础和非静态数据成员的初始化。成员初始化列表是可以指定这些对象的非默认初始化的地方。
例如,
MyClass1::MyClass1() : object(1000) {
}
答
错误是当进入构造函数的主体时,每个成员都应该被构造和初始化。由于没有参数,因此编译器会抱怨MyClass2
。
语法来初始化成员对象是:
MyClass1::MyClass1() : object(1000) {}
使用一个初始化列表来初始化,而不是做的是,在构造函数体中的成员变量。 – user0042
在哪里'的#include “MyClass2.h”''中MyClass1.cpp'?似乎应该在那里,因为你参考了'MyClass2'。 – InternetAussie