错误:将'const ComplexNumber'作为'const ComplexNumber&的'this'参数传递ComplexNumber :: operator - =(const Complex)

时间:2013-11-23 21:21:40

标签: c++ const

我收到了错误消息。

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

1 个答案:

答案 0 :(得分:2)

您的operator -不应修改lhs,因此要么创建副本,修改并返回它,要么按值传递:

ComplexNumber operator-(ComplexNumber lhs, const ComplexNumber& rhs){
    return lhs.operator-=(rhs);
}

我会使用这个,以便允许编译器执行移动而不是在函数内创建自己的副本(如果通过引用传递)。