Вы можете избежать подобных ошибок, написав определение функции друга в определении класса:
class fun
{
//...
friend ostream& operator<<(ostream& out, const fun& f)
{
out << "a= " << f.a << ", b= " << f.b << std::endl;
return out;
}
};
Недостатком является то, что каждый вызов operator<<
является встроенным, что может привести к раздуванию кода.
(Также обратите внимание, что параметр нельзя вызвать fun
, поскольку это имя уже обозначает тип.)