我的两个功能都有问题。我有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;
答案 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 ++风格。所有大写字母通常都保留给宏。