Ответы выше относятся к вашей первоначальной проблеме.Я собираюсь поговорить еще о двух.
Во-первых, вам, вероятно, следует использовать f.close () в конце вашего метода.Может быть, было бы прекрасно, если бы он выпал из области видимости и очистился оттуда, но я лично считаю, что это некрасиво, и я бы на это не рассчитывал.
Во-вторых, я бы не стал хранить данные вбинарный, если нет действительно веской причины сделать это.Это не будет портативным.Серж выше предлагает метод сериализации.Я бы рассмотрел альтернативный подход.Я написал бы в файл в удобочитаемой форме, такой как JSON.Да, это немного больше работы, но ...
- Если вы измените свой класс, ваши старые файлы будут по-прежнему читаемы. - Они переносимы в любой среде. - Вы можете посмотреть на них и легко понять, что онисодержать
Так что приведенные выше предложения Сержа не ужасны, но я бы выбрал более современный стиль сериализации / десериализации.
Обратите внимание, что ваш f.write не будет работать, потому что ваш объект содержит другиеобъекты, вы не знаете, как они работают под капотом.Эта строка, например, почти наверняка не может быть сброшена так, как вы пытаетесь это сделать.Кроме того, вы не только сбрасываете свои данные.
Кроме того, вы должны напечатать sizeof (k).Вы можете найти интересную информацию.Попробуйте учесть каждый байт.Вы могли бы напечатать sizeof (k.name), чтобы помочь вам разобраться с некоторыми из них.
Я почти уверен, что такая информация удивит вас, но на самом деле я сам этого не делал, потому что яникогда не будет пытаться скопировать в память объекты C ++, и это то, что вы пытаетесь сделать.