Мне нужно написать класс в двоичный файл, а затем мне нужно его прочитать.C++ Чтение/запись класса из/в двоичный файл
У меня есть классы Triangle
и BinaryFile
и некоторые другие классы. Я не уверен, что неправильно пишу или читаю неправильно. При чтении происходит ошибка. После отладки я думаю, что он получает несоответствующие данные для моих личных переменных. Я буду очень рад, если кто-нибудь может дать мне несколько советов о том, как заставить его работать правильно.
Я не был уверен, следует ли мне вставить весь код или нет, поэтому я дам вам короткий фрагмент кода. На всякий случай, вот ссылка на мой исходный код:
https://my.pcloud.com/publink/show?code=XZJ7CYZbsLWLglqV5p83csijcEUTFqqpM3k
Я новичок в программировании и я не говорю по-английски очень хорошо, поэтому я заранее извиняюсь за свои ошибки.
class Point
{
private:
int x;
int y;
};
class Figure
{
private:
string name;
string type;
};
class Triangle: public Figure
{
private:
Point p1, p2, p3;
};
class BinaryFile
{
private:
string FileName;
fstream File;
public:
//...
void AddNewFigure(istream& stream)
{
File.open(this->FileName, ios::binary | ios::app);
if(!this->File)
{
cerr<<"File error <"<<this->FileName<<">\n";
exit(1);
}
Triangle fig;
fig.MakeNewFigure(stream);
File.write((char*)&fig, sizeof(Triangle));
File.close();
}
Triangle GetTriangle()
{
Triangle trig;
Point p;
string str(""); int x(0);
File.open(this->FileName, ios::binary | ios::in);
if(!this->File)
{
cerr<<"File error <"<<this->FileName<<">\n";
exit(1);
}
File.read((char*)&trig, sizeof(Triangle));
File.close();
return trig;
}
};
Будьте осторожны. Вы не можете написать структуру, содержащую std :: string, в файл, написав структуру. Он работает для int, потому что они хранятся в структуре, но std :: string имеет указатель на динамически выделенную память, которая хранится вне структуры. –
хорошо, мне нужно изменить струны с чем-то еще? –
Нет, вам просто нужна функция write() и read() в каждой структуре, которая записывает и считывает содержимое структуры из потока, потому что структура знает, являются ли ее члены хранятся в структуре (например, int) или вне структуры (например, станд :: строка). Я сделаю ответ ... –