El programa C ++ se bloquea al leer el objeto del archivo de acceso aleatorio

Tengo el siguiente User.h que contiene varios atributos (cadenas). User.cpp tiene todas las definiciones.

//User.h
#ifndef USER_H
#define USER_H
#include<iostream>
#include <cstring>

using namespace std;

class User{

  string username;

  public:
         User();
         string getUsername() const;                      
         void setUsername(string);

};
#endif

Estoy usando otra clase, "Archivo" para insertar nuevos usuarios / ver usuarios desde un archivo .dat al que se accede aleatoriamente

//File.h
#ifndef FILE_H
#define FILE_H
#include "User.h"

class File{
    public:

             void loadUser(); 
             bool addUser(User&); 

};
#endif

Definiciones de clase de archivo

//File.cpp
#include<cstring>
#include<iostream>
#include<iomanip>
#include<fstream>

#include "User.h"
#include "File.h"

using namespace std;

User tempUser;
fstream usersFile;

void File::loadUser(){
     usersFile.open("users.dat", ios::in | ios::binary);

     usersFile.seekg(0);  

     // commenting the following lines prevented the issue
     usersFile.read(reinterpret_cast<char *>(&tempUser), sizeof(tempUser)); 

     cout<<tempUser.getUsername().c_str(); 

     usersFile.close();
}

bool File::addUser(User& user){

     usersFile.open("users.dat", ios::out | ios::ate | ios::binary);

     // no issue when writing to file
     usersFile.write( reinterpret_cast<const char *>(&user), sizeof(user));

     usersFile.close();

     cout<<"User added";  
}

Recibo el problema mencionado anteriormente cuando ejecuto. Sin embargo, no hay problema de compilación.

¿Hay algún problema al tratar con objetos que tienen "atributos de cadena" dentro, en el manejo?

Por favor ayuda

Respuestas a la pregunta(5)

Su respuesta a la pregunta