С ++ программа падает при чтении объекта из файла произвольного доступа

У меня есть следующий User.h, который содержит несколько атрибутов (строк). User.cpp имеет все определения.

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

Я использую другой класс «Файл» для вставки новых пользователей / просмотра пользователей из файла .dat со случайным доступом

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

class File{
    public:

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

};
#endif

Определения классов файлов

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

Я получаю вышеупомянутую проблему при запуске. Никакой проблемы компиляции все же.

Есть ли проблема при работе с объектами, имеющими «строковые атрибуты» внутри, при обработке?

Пожалуйста помоги

Ответы на вопрос(5)

Ваш ответ на вопрос