运算符=函数和加法函数似乎不能共存

Operator = function and an add function cant seem to coexist

本文关键字:函数 不能 运算符      更新时间:2023-10-16

我的两个函数有问题。我有operator =方法和add方法。它们自己工作得很好,就像在一次编译中我只能使用其中一个。例如,为了使operator =方法工作,我需要注释掉add函数,反之亦然。错误我得到10 no match for 'operator=' in 'c = (&a)->HUGE_INT::add(((HUGE_INT&)(&b)))'

     HUGE_INT HUGE_INT::operator=(HUGE_INT &orig)
        {
        //code
         return *this;
        }
        HUGE_INT HUGE_INT::add(HUGE_INT &a)
        {
         //code
         return object;
        }
//client
    HUGE_INT a(9999999),b(1111),c,d;
       c = a.add(b);
       d = a;

您遇到的问题是,您从add按值返回,并通过非常数引用将参数带到operator=

add返回的临时对象是一个右值,因此它不能绑定到非常量引用。

除非您正在做一些非常奇怪的事情,否则您可能希望将operator=更改为通过引用const:来接受其参数

    HUGE_INT& HUGE_INT::operator=(HUGE_INT const& orig)
    {
    //code
     return *this;
    }

(我还将其更改为通过引用返回,因为这是operator=的标准签名。)

我为您修复了代码,当然,它现在什么都不做,就像您的示例一样,但它可以编译。原因是您需要将"="运算符的参数指定为常量,并且正如其他海报所述,您还应该返回对对象的引用。

class HUGE_INT
{
public:
HUGE_INT(){this->var = 0;}
HUGE_INT(int v){this->var = v;};
HUGE_INT& operator=(const HUGE_INT &orig)
{
 return *this;
}
HUGE_INT add(HUGE_INT &a)
{
    HUGE_INT object;
 return object;
}
private:
    int var;
};

int main()
{

//client
HUGE_INT a(9999999),b(1111),c,d;
   c = a.add(b);
   d = a;
}

为了更好地理解,请查看关于操作员过载的教程

您的operator=应该返回一个引用以及一个常量引用;即它应该具有签名HUGE_INT& HUGE_INT::operator=(const HUGE_INT& orig)

顺便说一句,对类名使用全大写是非常糟糕的C++风格。所有大写字母通常都保留给宏。