this
не является реальной переменной, поэтому вы не можете получить ее адрес. Но это уже является указателем, так что вам не нужно. Он также имеет размер указателя, поэтому ваш sizeof
неверен. И тогда в C ++ вы не должны использовать приведения в стиле C. Итак, исправив эти 3 вещи, ваша строка станет
file.write(reinterpret_cast<char*>(this), sizeof(*this));
Это должно быть скомпилировано.
Однако , обратите внимание, что если Employee содержит что-то сложное, например std::string
member переменные, переменные-члены-указатели, виртуальные методы, конструктор / деструктор и т. д. c, вы не можете прочитать данные обратно. Эта запись в этом случае не записывает все или записывает неправильные значения времени выполнения, и вы получаете обратно мусор. Вы попадаете на ужасную территорию Неопределенное поведение , может произойти все, что угодно (включая вещи, которые, по-видимому, работают, когда вы это проверяете).