Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Llamada desde el main

Estas en el tema de Llamada desde el main en el foro de C/C++ en Foros del Web. ¿Como puedo llamar a CEmpleado *desSerializar(ifstream &fe);? se encuentra dentro CEmpleado que es una clase derivada de ficha, el problema lo tengo que cuando lo ...
  #1 (permalink)  
Antiguo 08/06/2011, 09:15
 
Fecha de Ingreso: mayo-2011
Mensajes: 10
Antigüedad: 13 años, 6 meses
Puntos: 0
Llamada desde el main

¿Como puedo llamar a CEmpleado *desSerializar(ifstream &fe);? se encuentra dentro CEmpleado que es una clase derivada de ficha, el problema lo tengo que cuando lo intento llamar desde el main no me deja, ¿alguna sugerencia?
  #2 (permalink)  
Antiguo 08/06/2011, 09:28
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 10 meses
Puntos: 89
Respuesta: Llamada desde el main

¿Como lo estas intentando? Instancia un objeto de esa clase y llama a la función, no veo el problema.
  #3 (permalink)  
Antiguo 08/06/2011, 09:32
 
Fecha de Ingreso: mayo-2011
Mensajes: 10
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Llamada desde el main

Mira te digo como lo tengo....
en CEmpleado:

CEmpleado* CEmpleado::desSerializar(ifstream &fe)
{
char aux1[256], aux2[256];
CEmpleado *empleado = new CEmpleado;
int i=12, j=0;

int k=9, l=0;
int m=6, n=0;
&fe.getline(aux1, 256);
while(aux1[k]!=EOF)
{
aux2[j]=aux1[l];
}
empleado->SetNombre(aux2);

&fe.getline(aux1, 256);
while(aux1[i]!=EOF)
{
aux2[n]=aux1[m];
}
empleado->SetEdad(atoi(aux2));

&fe.getline(aux1, 256);
while(aux1[i]!=EOF)
{
aux2[j]=aux1[i];
}
empleado->SetCategoria(aux2);
CEmpleado *serializar= new CEmpleado();
return empleado; //si te da fallo prueba con return &empleado;

}

la llamada la hago asi

CEmpleado *empleado = new CEmpleado;
empleado->desSerializar();

pero no me funciona

Última edición por javitotorrejon; 08/06/2011 a las 10:23
  #4 (permalink)  
Antiguo 08/06/2011, 10:49
Avatar de Anubis_Slash  
Fecha de Ingreso: mayo-2009
Ubicación: aqui y haya
Mensajes: 173
Antigüedad: 15 años, 6 meses
Puntos: 5
Respuesta: Llamada desde el main

Hola no he corrido tu codigo, pero te puedo decir que algo que veo mal cuando intentas llamar desSerializar es que no añades el parametro necesario

CEmpleado *empleado = new CEmpleado;
empleado->desSerializar(fe); //ifstream &fe aqui debes añadir el parametro

Intenta eso y si no funciona buscaremos una solucion mas detenidamente

Saludos
__________________
Bienvenidos los karmas.
Quejas, sugerencias o dudas, se awantan......
  #5 (permalink)  
Antiguo 08/06/2011, 23:31
 
Fecha de Ingreso: mayo-2011
Mensajes: 10
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Llamada desde el main

ok, sto ya me funciona muchisimas gracias!!!ahora me ha surgido otro problema, y es que cuando hago la llamada se me queda enganchado en el primer while en este,
while(aux1[k]!=EOF)
{
aux2[j]=aux1[l];
}

alguna sugerencia?
  #6 (permalink)  
Antiguo 09/06/2011, 02:51
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 10 meses
Puntos: 89
Respuesta: Llamada desde el main

Si, que vayas aumentando k porque si no aux1[k] siempre será lo mismo y si no es EOF entra en un bucle infinito.
  #7 (permalink)  
Antiguo 09/06/2011, 10:35
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: Llamada desde el main

Ademas por lo general va a llegar un nueva linea (\n) y no un EOF. Deberias cambiar la comparacion o agrgar las dos opciones.
  #8 (permalink)  
Antiguo 09/06/2011, 14:31
 
Fecha de Ingreso: mayo-2011
Mensajes: 10
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Llamada desde el main

Ya lo he conseguido! ahora el problema lo tengo en el return, que no me lo imprime bien, si visualizo el empleado antes de salir me lo imprimi sin problemas, pero en la funcion origen me mete valores basuras.... cuando hago la llamada aqui, tiene que ser algo del return, pero no se...

void CEmpresa::redcopseguridad()
{

CEmpresa *empresa = new CEmpresa;

ifstream fe("fichero.txt");
char aux1[256];
while (fe.getline(aux1,256)!=NULL)
{
if (aux1[1]=='s') {
if (aux1[9]=='E') {
CEmpleado *empleado = new CEmpleado;
empleado->desSerializar(fe);
empleado->Mostrar();
system ("pause");
}else {
CCliente *cliente = new CCliente;
cliente->desSerializar(fe);
//cliente->Mostrar();
system ("pause");
}
}
}
  #9 (permalink)  
Antiguo 09/06/2011, 16:06
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: Llamada desde el main

Deserializar no deberia retornar nada. Deberia modificar el porpio objeto que llama ese metodo.
No entiendo porque dentro del motodo de un objetos creas un objeto de la misma clase.

Fijate que el evento deserealizar crea un nuevo empleado lo devuelves con un return pero no lo tomas con una asignacion.

Lo que deberias hacer es, no crear un objeto Empleado y en vez de usar empleado->SetEdad() usar this->SetEdad()....asi en todos los metodos.

Deberias estudiar un pocos mas sobre porgramacion orientada a objetos.
  #10 (permalink)  
Antiguo 09/06/2011, 23:21
 
Fecha de Ingreso: mayo-2011
Mensajes: 10
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Llamada desde el main

Si si, si lo que me dices ya lo tengo si te fijas, pero cuando hago redcopseguridad() me imprime valores basuras, no me imprime bien los datos. yo creo que es por el return empleado que no me lo hace bien, fijate el empleado->mostrar(); lo hace perfecto, pero al pasarlo es cuando no me imprime nada, por eso creo que es el return
  #11 (permalink)  
Antiguo 10/06/2011, 03:23
 
Fecha de Ingreso: mayo-2011
Mensajes: 10
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Llamada desde el main

Muchas gracias a todos por vuestra paciencia, ya he conseguido que esto funcione, siento si he resultado un poco pesado, pero llevo poco tiempo en el mundo de C++ y me cuesta un poco ver ciertas cosas, y manejarme con cierta terminologia, pero lo consegui despues de darle muchas vueltas!

Etiquetas: llamada, main
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:14.