我收到了错误消息。
ComplexNumber.cpp: In function ‘ComplexNumber operator-(const ComplexNumber&, const ComplexNumber&)’:
ComplexNumber.cpp:79:27: error: passing ‘const ComplexNumber’ as ‘this’ argument of ‘const ComplexNumber& ComplexNumber::operator-=(const ComplexNumber&)’ discards qualifiers [-fpermissive]
return lhs.operator-=(rhs);
我尝试将重载函数运算符的返回值更改为ComplexNumber(real,imag),但后来收到错误消息
ComplexNumber.cpp:61:33: warning: returning reference to temporary [-Wreturn-local-addr]
我不确定为什么我收到第一条错误消息。我研究了很多,并且相信它可能与const有关。我该如何摆脱这个错误?为什么会这样?
代码是。
//defined -= operator
const ComplexNumber& ComplexNumber::operator-=(const ComplexNumber& rhs){
real = real - rhs.real;
imag = imag - rhs.imag;
return *this;
}
ComplexNumber operator-(const ComplexNumber& lhs, const ComplexNumber& rhs){
return lhs.operator-=(rhs);
}
答案 0 :(得分:2)
您的operator -
不应修改lhs
,因此要么创建副本,修改并返回它,要么按值传递:
ComplexNumber operator-(ComplexNumber lhs, const ComplexNumber& rhs){
return lhs.operator-=(rhs);
}
我会使用这个,以便允许编译器执行移动而不是在函数内创建自己的副本(如果通过引用传递)。