Hola, revisa el uso de reinterpret_cast
http://www.zator.com/Cpp/E4_9_9d.htm
Yo lo uso para escribir objetos en files y también leerlos.
Analizando tu código, veo que para cada objeto guardado, reabre el file, lo que por consiguiente siempre te de el objeto que este al inicio.
Alguna duda me escribes.