我正在尝试定义编译器自动生成的构造函数,并导致编译错误。这是我的代码:
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)"
答案 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() { }