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

时间:2014-01-24 18:51:29

标签: c++ visual-c++

有人可以告诉我为什么编译器会为此提出错误。

class A
{
private:
 int data;
public:
 A();
 A(A& a) { this->data = a.data; }
};

void main()
{
 A a();
 A b(a);
}

我得到的错误就是这个。

error C2664: 'A::A(A &)' : cannot convert parameter 1 from 
 'A (__cdecl *)(void)' to 'A &'

3 个答案:

答案 0 :(得分:9)

A a();

这是函数的前向声明,它返回A并且不带参数。所以,你试图将一个函数指针传递给你的构造函数,这当然不起作用,因为不存在这样的构造函数。如果要使用默认构造函数,请使用:

A a;

当然,没有定义该构造函数。你需要添加一个定义(你只写了一个声明)。

撇开; main被定义为返回int,您应该在构造函数中使用const引用。

A(const A &other) : data(other.data) {}

答案 1 :(得分:1)

首先应该是int main(),其次构造函数`A()没有正文

它也应该是A a;而不是A a();

修改

更好的是A(A& a) { this->data = a.data; }应该阅读A(const A& a) { this->data = a.data; }

答案 2 :(得分:-1)

试试这个:

class A
{
public:
  int data;
public:
  A(){this->data = 0;}
  A(A& a) { this->data = a.data; }
};

int main()
{
  A a;
  A b(a);
}

在Main中,声明

A a();

更改为:

A a;

因为编译器试图将括号识别为不存在的运算符。 “默认”构造函数已更改,因为链接器未识别该符号已被使用。您可以通过在基类中编程来覆盖此行为,该基类利用其构造函数中的数据字段。