我收到了错误信息。
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);
}
最佳答案
您的operator -
不应修改lhs
,因此可以创建副本,对其进行修改并返回它,或者按值传递:
ComplexNumber operator-(ComplexNumber lhs, const ComplexNumber& rhs){
return lhs.operator-=(rhs);
}
我将使用此命令来允许编译器执行移动,而不是在函数内部创建自己的副本(如果通过引用传递)。