我收到了错误信息。

 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);
}


我将使用此命令来允许编译器执行移动,而不是在函数内部创建自己的副本(如果通过引用传递)。

10-05 18:04