首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译器不允许定义编译器生成的构造函数

编译器不允许定义编译器生成的构造函数
EN

Stack Overflow用户
提问于 2011-06-12 22:50:14
回答 4查看 9K关注 0票数 4

我正在尝试定义编译器自动生成并导致编译错误的构造函数。下面是我的代码:

代码语言:javascript
复制
class myclass
 {
   public:
       void Test_Func()
       {}
 };
myclass::myclass()
{
}

编译器是否为上面这样的简单类做了额外的工作。下面是我在MSVC编译器中得到的错误:

代码语言:javascript
复制
"error C2600: 'myclass::myclass' : cannot define a compiler-generated special member function (must be declared in the class first)"
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-12 22:54:40

合成的构造函数既被声明又被定义。你可能不会自己定义它。

为了提供实现,您必须声明自己的构造函数。

[special] (2003年措辞,12/1)说:

默认构造函数(12.1),复制构造函数和复制赋值运算符(12.8),以及析构函数(12.4)是特殊的成员函数。当程序没有显式声明这些成员函数时,该实现将为类类型隐式声明这些成员函数,除非在12.1中注明。如12.1、12.4和12.8中所述,如果使用,则实现将隐式定义它们。程序不应定义隐式声明的特殊成员函数。

票数 8
EN

Stack Overflow用户

发布于 2011-06-12 22:52:58

如果用户生成的默认构造函数尚未声明,则无法定义该构造函数。编译器已经定义了它,所以您已经定义了多个默认构造函数。如果您希望定义一个默认构造函数,则必须声明一个默认构造函数-就像任何其他函数一样。

票数 4
EN

Stack Overflow用户

发布于 2011-06-12 22:53:03

尝试这样做:

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

https://stackoverflow.com/questions/6322573

复制
相关文章

相似问题

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