重载operator =的错误

时间:2014-10-05 00:31:22

标签: c++ g++ operator-overloading

由于某些原因,当我在visual studio上编译时,我的重载运算符工作正常但是当我在linux上编译g ++时,我得到以下错误:

main.cpp:66:4:错误:'operator ='不匹配(操作数类型为'UVLI'和'UVLI')   f = a + b;

出于某种原因,它似乎正在寻找一个重载的运算符=哪个需要UVLI,UVLI而且我不知道为什么。

以下是我的经营者:

UVLI UVLI::operator+(unsigned long number) const
{
     UVLI result, right;        
     UVLI left((*this));

    right.long2UVLI(number);
    result.add(left, right);
    return result;
}

UVLI UVLI::operator+(UVLI &right) const
{
    UVLI result;
    UVLI left((*this));

    result.add(left, right);
    return result;
}

void UVLI::operator=(unsigned long number)
{

    this->long2UVLI(number);
    return;
}

 void UVLI::operator= (UVLI &right)
{
    this->copy(right);
    return;
}

我在主要功能中所做的就是:

UVLI f;
f = a + b;

有谁知道为什么g ++没有使用我的+运算符,而是试图找到=(UVLI,UVLI)?

我不担心操作员内部的内容是错误的,我只是想让它正确调用。

感谢。

1 个答案:

答案 0 :(得分:-1)

你的赋值运算符需要使用const引用,它们的返回类型应该是UVLI&。作业操作员必须遵循以下严格的形式:

UVLI& operator = (const UVLI& that) {
    this->copy(that);
    return *this;
}

这样做的主要原因是允许操作员链接:

UVLI a;
UVLI b;
UVLI c;
UVLI d = c = a + b;