C++. Как записать класс в бинарный файл с помощью перегруженного оператора?

Мне нужно записать в бинарный файл свой класс:
class Book
{
public:
	Book(void);
	~Book(void);
	
	char *code;
	char *name;
	char *autor;
	char *publisher;
	char *year;
	bool remove;

	bool check(void);
};


Для этого я перегрузил оператор ввода:
ofstream& operator<<(ofstream &of, const Book &book)
{
	of.write(book.code, my_strlen(book.code));
	of.write("\n", 1);
	of.write(book.name, my_strlen(book.name));
	of.write("\n", 1);
	of.write(book.autor, my_strlen(book.autor));
	of.write("\n", 1);
	of.write(book.publisher, my_strlen(book.publisher));
	of.write("\n", 1);
	of.write(book.year, my_strlen(book.year));
	of.write("\n", 1);
	of.write(book.remove ? "1" : "0", 1);
	of.write("\n", 1);
	return (of);
}


Но с этой функцией у меня не компилится программа. И еще вопрос: что нужно возвращать из этой функции?
  • Вопрос задан
  • 133 просмотра
Решения вопроса 1
@MarkusD Куратор тега C++
все время мелю чепуху :)
Все дело в том, что внешняя перегрузка операторов должна соблюдать правила ADL.
Перегрузка оператора в виде внешней функции является частью внешнего интерфейса того типа, для которого оператор перегружается. В случае бинарных операций перегрузка производится для типа левого операнда.

Твой operator<<(ofstream&, const Book&) должен быть определен в пространстве имен std, т.к. ofstreamопределен именно в этом пространстве.

Правильная перегрузка должна выглядеть так:
namespace std
{
    // use the `Book` type definitely from global namespace.
    ofstream& operator<<(ofstream &of, const ::Book &book)
    {
        // ...
    }
}


И еще вопрос: что нужно возвращать из этой функции?

Конкретно этот оператор (в терминологии стандартных стримов) возвращает левый операнд по ссылке.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы