我如何正确地流式传输和如果流式传输列表向量?
我的向量是vector<Civilizacion> arreglo
,列表是list<Aldeano> aldeanos
。它们在不同的类上声明。我正在使用的ofstream函数功能如下:
void VideoGame::respaldar(vector<Civilizacion> &civilizaciones)
{
ofstream archivo("civilizaciones.txt", ios::out);
for(size_t i(0);i<civilizaciones.size();i++){
Civilizacion &c = civilizaciones[i];
archivo << c.getName() << endl;
c.respaldar();
}
archivo.close();
}
它调用c.respaldar()
,它是流函数的列表:
void Civilizacion::respaldar()
{
ofstream aldeanoss(getName() + ".txt", ios::out);
for(auto it = aldeanos.begin(); it!=aldeanos.end(); it++){
Aldeano &aldeano = *it;
aldeanoss<<aldeano.getNombre()<<endl;
aldeanoss<<aldeano.getEdad()<<endl;
aldeanoss<<aldeano.getGenero()<<endl;
aldeanoss<<aldeano.getSalud()<<endl;
}
aldeanoss.close();
}
这将创建一个.txt存档,标题为我在void Videogame::respaldar(...)
中输入的名称,并带有信息void Civilizacion::respaldar()
。但是,当我尝试使用ifstream来恢复信息时,什么也没有发生,这些是我尝试使用的功能。
对于矢量:
void VideoGame::recuperar()
{
ifstream archivo("civilizaciones.txt");
if(archivo.is_open()){
while(!archivo.eof()){
string linea;
getline(archivo,linea);
if(archivo.eof()){
break;
}
c.setName(linea);
}
c.recuperarAld();
}
}
c.recuperarAld()
正在调用列表ifstream函数:
void Civilizacion::recuperarAld()
{
ifstream aldeanoss(getName() + ".txt");
if(aldeanoss.is_open()){
while(!aldeanoss.eof()){
string linea;
Aldeano a;
getline(aldeanoss, linea);
if(aldeanoss.eof()){
break;
}
a.setNombre(linea);
getline(aldeanoss, linea);
a.setEdad(stoul(linea));
getline(aldeanoss, linea);
a.setGenero(linea);
getline(aldeanoss, linea);
a.setSalud(stoi(linea));
}
}
}
但是它不起作用,我该如何解决?