Programa C ++ falha ao ler o objeto do arquivo de acesso aleatório

Eu tenho o seguinte User.h que contém vários atributos (seqüências de caracteres). User.cpp possui todas as definições.

//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

Estou usando outra classe, "Arquivo" para inserir novos usuários / exibir usuários de um arquivo .dat acessado aleatoriamente

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

class File{
    public:

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

};
#endif

Definições de classe de arquivo

//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";  
}

Estou recebendo o problema acima mencionado ao executar. Nenhum problema de compilação embora.

Existe algum problema ao lidar com objetos que possuam "atributos de cadeia" no seu processamento?

Por favor ajude

questionAnswers(5)

yourAnswerToTheQuestion