错误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 
+0

使用一个初始化列表来初始化,而不是做的是,在构造函数体中的成员变量。 – user0042

+0

在哪里'的#include “MyClass2.h”''中MyClass1.cpp'?似乎应该在那里,因为你参考了'MyClass2'。 – InternetAussie

你试图分配object构造体内,在这之前object必须是缺省构造,但MyClass2没有按没有默认的构造函数。

您应该使用member initializer list指定哪个构造应该被用来初始化object

在形成构造函数体的复合语句开始执行之前,完成所有直接基础,虚拟基础和非静态数据成员的初始化。成员初始化列表是可以指定这些对象的非默认初始化的地方。

例如,

MyClass1::MyClass1() : object(1000) { 
} 

错误是当进入构造函数的主体时,每个成员都应该被构造和初始化。由于没有参数,因此编译器会抱怨MyClass2

语法来初始化成员对象是:

MyClass1::MyClass1() : object(1000) {}