为什么我收到此代码的错误?

Met*_*est 3 c++ visual-c++

有人能告诉我为什么编译器会给出错误.

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)

Ed *_* S. 9

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)