代码:
struct A
{
~A(){ };
};
A::A(){ }; //error: definition of implicitly declared default constructor
int main()
{
A a;
}
为什么代码会产生错误?我希望程序编译好。标准说N3797::12.8/7 [class.copy]
:
如果类定义未明确声明副本 构造函数,一个是隐式声明的。如果是类定义 声明一个移动构造函数或移动赋值运算符 隐式声明的复制构造函数被定义为已删除;除此以外, 它被定义为默认值(8.4)。 如果,则不推荐使用后一种情况 类具有用户声明的复制赋值运算符或用户声明的 析
这是一个错误还是我的误解?
答案 0 :(得分:5)
struct A
{
~A(){ };
A();
};
A::A(){ }; //here you can define default constructor
int main()
{
A a;
}
你已经定义了显式析构函数而不是构造函数,添加构造函数声明并将其定义为外部clas
答案 1 :(得分:4)
您可能无法通过编译器定义隐式声明的构造函数。
来自C ++标准(12个特殊成员函数)
- ...程序不得定义隐式声明的特殊成员函数
醇>