Вы должны указать функцию, которой принадлежит класс.Вы либо помещаете эту функцию в объявление класса:
class Book{
...
friend ostream & operator << (ostream & b, Book & a)
{
b.setf(ios::fixed | ios::showpoint);
b.precision(2);
b << "Title : \"" << a.title << "\"\n"
<< "Author : \"" << a.author << "\"\n"
<< "Price : $" << a.price / 100.0 << endl
<< "Genre : " <<a.genre << endl
<< "In stock? " << (a.status ? "yes" : "no") << endl
<< endl;
return b;
}
};
Другой способ - объявить ее как друга в классе и определить ее в другом месте:
class Book{
...
friend ostream & operator << (ostream & b, Book & a);
};
...
// Notice, there is no "friend" in definition!
ostream & operator << (ostream & b, Book & a)
{
b.setf(ios::fixed | ios::showpoint);
b.precision(2);
b << "Title : \"" << a.title << "\"\n"
<< "Author : \"" << a.author << "\"\n"
<< "Price : $" << a.price / 100.0 << endl
<< "Genre : " <<a.genre << endl
<< "In stock? " << (a.status ? "yes" : "no") << endl
<< endl;
return b;
}