首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误C2512:没有合适的默认构造函数可用:使用参数声明对象!在构造函数内部

错误C2512:没有合适的默认构造函数可用:使用参数声明对象!在构造函数内部
EN

Stack Overflow用户
提问于 2017-07-29 20:06:13
回答 2查看 246关注 0票数 0

我有一个关于构造函数的问题。我有两个类(MyClass1,MyClass2)。

MyClass1.h

代码语言:javascript
运行
复制
class MyClass1 {
public:
    MyClass1();
    ...
private:
    MyClass2 object;
    ...
}

MyClass1.cpp

代码语言:javascript
运行
复制
#include "MyClass1.h"

MyClass1::MyClass1() {      //This constructor causes the error!!!
    object = MyClass2(1000);
    ...
}

...

MyClass2.h

代码语言:javascript
运行
复制
class MyClass2 {
public:
    MyClass2(int);
    ...
private:
    int id;
    ...
}

MyClass2.cpp

代码语言:javascript
运行
复制
#include "MyClass2.h"

MyClass2::MyClass2(int id) {
    this->id = id;
    ...
}
...

在创建'MyClass1‘的实例时,我收到以下错误消息:

代码语言:javascript
运行
复制
error C2512: 'MyClass2': no appropriate default constructor available 
EN

回答 2

Stack Overflow用户

发布于 2017-07-29 20:07:35

object需要默认构造之前,您试图在构造函数的主体内分配object,但MyClass2没有默认构造函数。

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

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

例如:

代码语言:javascript
运行
复制
MyClass1::MyClass1() : object(1000) {
}
票数 3
EN

Stack Overflow用户

发布于 2017-07-29 20:08:02

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

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

代码语言:javascript
运行
复制
MyClass1::MyClass1() : object(1000) {}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45389088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档