Operator = function和add函数似乎不能共存

时间:2012-02-09 04:24:28

标签: c++ class operator-overloading

我的两个功能都有问题。我有operator =方法以及add方法。它们可以自行工作,因为我只能在一次编译中使用其中一个。例如,我需要注释掉add函数,以使operator =方法起作用,反之亦然。我得到的错误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;

3 个答案:

答案 0 :(得分:5)

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

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

除非你做了一些非常奇怪的事情,否则你可能想要改变operator=以通过引用const来获取它的参数:

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

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

答案 1 :(得分:1)

我为你修复了代码,当然它现在没有像你的例子那样做,但它编译。 原因是您需要将'='运算符的参数指定为常量,并且如其他海报所述,您还应该返回对该对象的引用。

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;
}

为了更好地理解,请查看tutorial运算符重载

答案 2 :(得分:1)

你的operator=应该返回一个引用以及一个const引用;也就是说,它应该有一个签名HUGE_INT& HUGE_INT::operator=(const HUGE_INT& orig)

作为旁注,对类名使用全部大写是非常糟糕的C ++风格。所有大写字母通常都保留给宏。