Поскольку
для типа возврата:
ostream
объекты не могут быть скопированы, поэтому их нельзя использовать в качестве типа возврата, если вы не выполните операцию move
.
для параметра:
ostream
объекты не копируются, поэтому их нельзя использовать в качестве типа параметра, если вы не выполните операцию move
. - Ожидается, что
operator <<
может изменить состояние параметра, поэтому мы должны передать по ссылке.
И, учитывая второй принцип для параметра, ваш код должен быть исправлен на:
ostream& operator<<(ostream& cout, const Complex& num) {
cout << num.a << "+i" << num.b;
return cout;
}