将对象向量写入文件并读取它



我正在尝试写一个向量,它由一个名为"行星"的类组成;到一个文件,并让程序在运行时读取该文件。这样一来,每次运行程序时,Planets数据都会持续存在。我正在使用fstream.

这是我的类声明:

class Planet
{
private:
string name;
double mass, diameter;
public:
double SurfaceArea();
double Density();
double Acceleration();
void Input();
void Display();
void SetName(string s);
bool SetMass(double x);
bool SetDiameter(double x);

string GetName();
double GetMass();
double GetDiameter();

Planet();
Planet(double m, double d);
};

这是我试图打开文件"data">

fstream file;
file.open("data", ios::app);

这是我如何试图写入数据文件

for (int i=0; i<listOfPlanets.size();i++)
{
file << listOfPlanets[i] << endl;
}

file.close();
下面是我对listOfPlanets的声明vector <Planet> listOfPlanets;

我得到一个关于匹配运算符的错误。粘贴在这里:

error: no match for ‘operator<<’ (operand types are ‘std::fstream’ {aka ‘std::basic_fstream<char>’} and ‘__gnu_cxx::__alloc_traits<std::allocator<Planet>, Planet>::value_type’ {aka ‘Planet’})
297 |   file << listOfPlanets[i] << endl;

只是为了澄清,我已经编写了代码来将行星添加到listOfPlanets向量,我只是不知道如何将行星写入数据文件并让程序在再次运行时读取它们。

注意:我在代码

中包含了iostream和fstream如果有人能帮我,那就太好了。我想它可能需要某种循环,但我不确定。谢谢你。这是我在这里的第一个问题,所以我为任何格式问题道歉。

如果试图错误地保存类成员的值,则不能使用<<操作符,因为如果不这样做,您将尝试将整个类传递给文件对象,而不是传递其成员的值(例如,对于名称,使用GetName()将字符串写入文件,等等)

for (int i=0; i<listOfPlanets.size();i++)
{
file << listOfPlanets[i].GetName() << endl;
}

如果你想使用<<操作符并一次将所有值写入文件,您需要重载<<操作符

最新更新