Отсутствует оператор << соответствующий этим операндам
#include <iostream>
class X
{
public:
X(int b)
{
this->b = b;
}
~X()
{
}
int b;
friend X operator+ (const X&, const X&);
friend std::ostream& operator<< (std::ostream&, X&);
};
X operator+ (const X& left, const X& right)
{
X ret = left;
ret.b += right.b;
return ret;
}
std::ostream& operator<< (std::ostream& out, X& lst)
{
out << lst.b;
return out;
}
int main()
{
X a(10);
X b(20);
std::cout << a + b;
return 0;
}
вылетает
error C2679: бинарный "<<": не найден оператор, принимающий правый операнд типа "X" (или приемлемое преобразование отсутствует)
Что в данном случае неверно? Оператор + возвращает как раз X который подходит под перегрузку <<
Ответы (1 шт):
Автор решения: Mikhailo
→ Ссылка
Все решается одним словом const. Вы неправы в одном -
Оператор + возвращает как раз X который подходит под перегрузку <<
он вернет временный X, rvalue, который никак под эту перегрузку не подходит. А подходит под эту:
std::ostream& operator<< (std::ostream&, const X&);