Problema con Stack con template y objetos

Iniciado por acer-x, 23 Junio 2019, 02:35 AM

0 Miembros y 1 Visitante están viendo este tema.

acer-x

Hola, tengo un problema, este es el codigo#include <cstdlib>
#include <iostream>
#include <stack>
#include <fstream>
#include <stdlib.h>
#include <string.h>
#include "persona.h"

using namespace std;

void extraerarchivo(stack <persona> X)
{
    string nombre,rut,sexo,domicilio,circunscripcion,mesa;
    ifstream archivo;

    archivo.open("entrada.csv",ios::in);//Abrimos el archivo en el modo lectura

    if(archivo.fail())
    {
        cout<<"ERROR: No se pudo abrir el archivo."<<endl;
        exit(1);
    }

    while(!archivo.eof())
    {
        persona a;
        getline(archivo,nombre,';');
        a.Setnombre(nombre);

        getline(archivo,rut,';');
        a.Setrut(rut);

        getline(archivo,sexo,';');
        a.Setsexo(sexo);

        getline(archivo,domicilio,';');
        a.Setdomicilio(domicilio);

        getline(archivo,circunscripcion,';');
        a.Setcircunscripcion(circunscripcion);

        getline(archivo,mesa,';');
        a.Setmesa(mesa);


        X.push(a);
    }



    archivo.close();

}


int main()
{
    stack <persona> X;
    extraerarchivo(X);

    persona x=X.top();

    cout<<x.Getnombre()<<endl;
    cout<<x.Getrut()<<endl;
    cout<<x.Getsexo()<<endl;
    cout<<x.Getdomicilio()<<endl;
    cout<<x.Getcircunscripcion()<<endl;
    cout<<x.Getmesa()<<endl;



    return 0;
}



se supone que estoy leyendo los datos del archivo.csv y los guardo en el objeto persona y despues lo paso al stack, pero al momento de imprimer no me sale nada, solo los saltos de linea, que error puede haber ?

gracias

Loretz

void extraerarchivo(stack <persona> X)

Estás pasando una copia de stack<persona>  X, que al salir de la función se destruirá. Si necesitas modificar una stack<persona> ya creada puedes pasar una referencia (o un puntero) o, mejor, la función extrerarchivo puede devolver una stack<persona>. y usar así:

stack<persona> extraerarchivo();

...


stack <persona> X = extraerarchivo();


supongo que hasta sería mejor si a la función eztraerarchivo le pasas también el iftream de dónde leer los datos, pero eso ya es otra cirugía.



acer-x

#2
Cita de: Loretz en 23 Junio 2019, 03:07 AM
void extraerarchivo(stack <persona> X)

Estás pasando una copia de stack<persona>  X, que al salir de la función se destruirá. Si necesitas modificar una stack<persona> ya creada puedes pasar una referencia (o un puntero) o, mejor, la función extrerarchivo puede devolver una stack<persona>. y usar así:

stack<persona> extraerarchivo();

...


stack <persona> X = extraerarchivo();


supongo que hasta sería mejor si a la función eztraerarchivo le pasas también el iftream de dónde leer los datos, pero eso ya es otra cirugía.



Muchas gracias! al final lo he puesto por referencia como has dicho, pero me seguia tirando el mismo problema,
he estado toda la noche probando e investigando hasta que encontre la solucion, y era que habia hecho un constructor copia en la clase persona  que no me daba ningun valor, asi que solo lo borre y ya.

muchas gracias por responder se agradece.

Saludoooos!!