Я получил сообщение об ошибке.
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);
Я попытался изменить возврат перегруженной функции operator- как 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);
}
Я бы использовал это, чтобы позволить компилятору выполнить переход вместо создания собственной копии внутри функции (если вы передаете ссылку).