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

时间:2011-06-12 14:50:14

标签: c++

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

class myclass
 {
   public:
       void Test_Func()
       {}
 };
myclass::myclass()
{
}

编译器是否正在为上面的简单类做任何事情。这是我在MSVC编译器中遇到的错误:

"error C2600: 'myclass::myclass' : cannot define a compiler-generated special member function (must be declared in the class first)"

4 个答案:

答案 0 :(得分:8)

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

您必须声明自己的构造函数才能提供实现。

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

  

默认构造函数(12.1),复制   构造函数和复制赋值   运算符(12.8)和析构函数(12.4)   是特殊的会员功能。该   实现将隐式声明   这些成员函数用于类   当程序没有时输入   显式声明它们,除了   在12.1中提到。 实施将   隐含地定义它们,如果它们是   使用,如12.1,12.4和。中所述   12.8。 程序不应定义隐式声明的特殊成员   功能

答案 1 :(得分:4)

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

答案 2 :(得分:0)

尝试这种方式:

class myclass { public: myclass(); void Test_Func() {} }; myclass::myclass() { }

答案 3 :(得分:0)

如果你要定义函数,它需要包含在类声明中,如下所示:

class myclass { public: myclass(); void Test_Func() {} }; myclass::myclass() { }