由于某些原因,当我在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)?
我不担心操作员内部的内容是错误的,我只是想让它正确调用。
感谢。
答案 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;