ошибка: передача 'const ComplexNumber' в качестве 'this' аргумента 'const ComplexNumber & ComplexNumber :: operator - = (const Complex)

0

Я получил сообщение об ошибке.

 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);
}
Теги:
const

1 ответ

2
Лучший ответ

Ваш operator - не должен изменять lhs, поэтому либо создайте копию, измените ее и верните, либо перейдите по значению:

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

Я бы использовал это, чтобы позволить компилятору выполнить переход вместо создания собственной копии внутри функции (если вы передаете ссылку).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню