错误C2512:没有合适的默认构造函数:带参数的对象声明!在构造函数

时间:2017-07-29 12:06:13

标签: c++ constructor

构建器有问题。 我有两个类(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 

2 个答案:

答案 0 :(得分:3)

您需要在构造函数体内分配 object之前,object需要默认构造,但是{{1没有默认的构造函数。

您应该使用member initializer list来指定应该使用哪个构造函数来初始化MyClass2

  

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

e.g。

object

答案 1 :(得分:0)

错误是当进入构造函数的主体时,应该构造并初始化每个成员。因为tehre没有ctor,没有可用于listing=[12,34,5,33,89,3] for i in range(0,len(listing)-1): for j in range(0,len(listing)-i-1): if listing[j]>listing[j+1]: temp=listing[j] listing[j]=listing[j+1] listing[j+1]=temp print(listing) 编译器抱怨的参数。

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

MyClass2