С ++ программа падает при чтении объекта из файла произвольного доступа
У меня есть следующий 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";
}
Я получаю вышеупомянутую проблему при запуске. Никакой проблемы компиляции все же.
Есть ли проблема при работе с объектами, имеющими «строковые атрибуты» внутри, при обработке?
Пожалуйста помоги