有人能告诉我为什么编译器会给出错误.
class A
{
private:
int data;
public:
A();
A(A& a) { this->data = a.data; }
};
void main()
{
A a();
A b(a);
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误就是这个.
error C2664: 'A::A(A &)' : cannot convert parameter 1 from
'A (__cdecl *)(void)' to 'A &'
Run Code Online (Sandbox Code Playgroud)
A a();
Run Code Online (Sandbox Code Playgroud)
这是一个函数的前向声明,它返回一个A
并且不带参数.所以,你试图将一个函数指针传递给你的构造函数,这当然不起作用,因为不存在这样的构造函数.如果要使用默认构造函数,请使用:
A a;
Run Code Online (Sandbox Code Playgroud)
当然,没有定义该构造函数.你需要添加一个定义(你只写了一个声明).
作为旁白; main
被定义为返回一个int
,你应该在构造函数中使用const引用.
A(const A &other) : data(other.data) {}
Run Code Online (Sandbox Code Playgroud)