У меня есть класс AccountManagement в AccountManagement.cpp. У меня есть еще один класс Account в Account.cpp. У меня есть шаблон, который упорядочивает данные в списке с помощью класса OrdereList, который также имеет свой собственный итератор. Класс AccountManagement выводит список учетных записей в виде двоичного файла, как показано ниже:C++: проблемы чтения ввода из двоичного файла
void AccountManagement::saveData(const char * file) //saves data in the specified binary file
{
ofstream out(file, ios::out | ios::binary);
if(!out)
{
cerr<<"Problem opening output file!"<<endl;
}
OrderedList<Account>::iterator it = this->account_manager.begin();
for(int i = 0; i < this->total_accounts; i++)
{
Account temp = *it;
out.write((char*)&temp, sizeof(Account));
it++;
}
out.close();
}
Я определил следующую функцию внутри класса AccountManagement, который считывает все данные из двоичного файла и выводит его. Эта функция работает отлично. Показано здесь:
void AccountManagement::output()
{
ifstream in("accounts.dat", ios::in | ios::binary);
if(!in)
{
cerr<<"File doesn't exist!"<<endl;
exit(1);
}
Account acc;
while(in.read((char*)&acc, sizeof(Account)))
{
cout<<acc;
}
in.close();
}
Однако, когда я использую эту же функцию (с другим именем) в другом файле, который имеет Account.h файл заголовка, а также для извлечения данных из того же «account.dat» файл это дает мне ошибку сегментации. В чем может быть проблема? Ниже приводится функция: декларация класса
void loadData()
{
ifstream in("accounts.dat", ios::in | ios::binary);
if(!in)
{
cerr<<"File doesn't exist!"<<endl;
exit(1);
}
Account acc;
while(in.read((char*)&acc, sizeof(Account)))
{
cout<<acc;
}
in.close();
}
акаунта:
class Account
{
friend ostream& operator<<(ostream&,const Account&); //overloading << operator
friend istream& operator>>(istream&,Account&); //overloading >> operator
public:
void operator=(const Account&); //overloading = operator
bool operator<=(const Account&); //overloading <= operator
bool operator<(const Account&); //overloading < operator
private:
string number; //Account Number
char name[100]; //Account holder's name
char sex; //M or F indicating the gender of account holder
MYLIB::Date dob; //date of birth of account holder
char address[100]; //address of account holder
char balance[20]; //balance of account holder
};
Как выглядит класс 'Accounts'? Вы читаете из другого процесса (другая программа)? В классе 'Account' содержатся указатели, строки, векторные или другие динамические типы? –
Если 'Account' содержит сложные типы, такие как' std :: string' или 'std :: vector', этот код, скорее всего, не удастся. –
Да, он содержит строки stl и другие классы. Но как он может работать в AccountManagement, но не в другом файле? –