Получение ошибки: нет соответствия для 'operator <<' (типы операндов - 'std :: basic_ostream <char>' и 'Complex'), несмотря на перегрузку оператора << - PullRequest
2 голосов
/ 29 мая 2020

Я новичок в программировании ie и пишу простую программу, которая складывает два комплексных числа. Я перегрузил << следующим образом:

ostream& operator << (ostream& output, Complex &complex_num){

        output << complex_num.realPart << " + " << "(" << complex_num.imaginaryPart << ")i" <<endl;
        return output;

    }

Моя функция сложения выглядит следующим образом:

Complex operator +(Complex &c2){
        Complex temp;
        temp.realPart=realPart+c2.realPart;
        temp.imaginaryPart=imaginaryPart + c2.imaginaryPart;
        return temp;
    }

В моей основной функции, когда я пытаюсь распечатать результат с помощью набрав:

cout << "ADDITION OF THE TWO COMPLEX NUMBERS: "<<num1 + num2<< endl; 

Я получаю сообщение об ошибке, в котором указано, что оператор << не соответствует. Однако, когда я назначаю другому объекту num3 = num1 + num2, а затем пишу следующий код, программа работает нормально.

cout << "ADDITION OF THE TWO COMPLEX NUMBERS: "<<num3<< endl; 

Что здесь происходит? Кто-нибудь может мне помочь?

1 Ответ

8 голосов
/ 29 мая 2020

Ваш operator+ возвращает Complex, который является временным объектом. Он не работает при использовании с operator<<, потому что вы пытаетесь привязать его к неконстантному ссылочному аргументу.

Переменная может быть связана с неконстантной ссылкой, так что это работает.

Исправление заключалось бы в том, чтобы принять аргумент operator<< по ссылке const:

ostream& operator << (ostream& output, Complex const &complex_num);

, поэтому теперь он работает и для временных файлов. Более того, он работает и для аргументов const.

...