如何ifstream一个列表向量?

时间:2019-04-25 16:03:57

标签: list vector ifstream ofstream

我如何正确地流式传输和如果流式传输列表向量? 我的向量是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));
        }
    }
}

但是它不起作用,我该如何解决?

0 个答案:

没有答案