C++复制构造函数编译错误

C++ copy constructor compilation error

本文关键字:错误 编译 构造函数 复制 C++      更新时间:2023-10-16

我已经阅读了一些关于这个主题的文章,但在编译自己的代码时仍然存在问题。

我有A级:

class A
{
public:
     List<int> data;  
     A(){} 
     A(A&){}
     A& operator= (const A& a)
     {
         // copy the data from a to data  
     }       
};

B类将调用A类:

class B
{
public:
    A makeA()
    {
        A a;
        return a;
    }
    A getA()
    {
        A a = makeA();
        return a;
    }
};

当我在Linux下用g++编译代码时,我得到了:

对"A::A(A)"的调用没有匹配的函数。

编译器似乎只是忽略了赋值操作。你能帮我摆脱困境吗?

为了编译它,复制构造函数必须通过const引用获取其参数:

A(const A&){}

const添加到构造函数签名中可以修复此问题(ideone上的演示)。

由于您要定义一个赋值运算符和一个复制构造函数,因此应该强烈考虑添加一个destructor ~A()(请参阅三规则)。

此处不使用赋值运算符。

A a = makeA();

这一行是初始化;它使用复制构造函数将CCD_ 4返回的值复制到CCD_。编译器抱怨A::A(A&)不能与临时;将其更改为更常见的形式A(const A&),情况就会好得多。

@彼得是对的。复制构造函数A(A&){}希望是A(const A&){}。原因是A(A&){}告诉编译器准备修改传递给复制构造函数的A,这实际上没有意义,而且在您传递的A是临时的情况下肯定没有意义。