• Miércoles 20 de Noviembre de 2024, 12:30

Autor Tema:  [SOLUCIONADO] Salto ilógico a método  (Leído 1392 veces)

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
[SOLUCIONADO] Salto ilógico a método
« en: Martes 28 de Abril de 2009, 11:07 »
0
Hola de nuevo a tod@s  :hola:

En cgeneral.cpp tengo este método:

Código: C++
  1. void cGeneral::inicializar_lista_personajes()
  2. {
  3.     int i;
  4.     cPersonaje *nuevo_personaje;
  5.     cFrame nuevo_frame;
  6.     BITMAP *aux_bitmap;
  7.    
  8.     nuevo_personaje = new cPersonaje;
  9.    
  10.     nuevo_personaje->modificar_nombre("OVNI");
  11.     aux_bitmap = load_bitmap("ovni.pcx", NULL);
  12.     nuevo_frame.modificar_frame(aux_bitmap);
  13.     nuevo_personaje->modificar_frame(nuevo_frame, 0);
  14.     this->lista_personajes.insertar_ultimo(nuevo_personaje);
  15.    
  16.     this->lista_personajes.actual_inicializar();
  17. }
  18.  
Al hacer la llamada en la línea 14, salta a

Código: C++
  1. void cListaPersonajes::insertar_ultimo(cPersonaje *ins_ultimo)
  2. {
  3.     cNodoListaPersonajes *aux_nodo;
  4.    
  5.     aux_nodo = new cNodoListaPersonajes;
  6.     aux_nodo->modificar_personaje(*ins_ultimo);
  7.     aux_nodo->modificar_anterior(this->final_lista);
  8.     this->final_lista = aux_nodo;
  9.    
  10.     if (this->numero_personajes == 0)
  11.         this->inicio_lista = aux_nodo;
  12.     else
  13.         aux_nodo->obtener_anterior()->modificar_siguiente(aux_nodo);
  14.        
  15.     this->numero_personajes++;
  16. }
  17.  
Pues bien, aquí, al hacer la llamada en línea 6 aux_nodo->modificar_personaje(*ins_ultimo);, salta directamente a la línea 6 del método

Código: C++
  1. void cListaPersonajes::insertar_primero(cPersonaje *ins_primero)
  2. {
  3.     cNodoListaPersonajes *aux_nodo;
  4.    
  5.     aux_nodo = new cNodoListaPersonajes;   
  6.     aux_nodo->modificar_personaje(*ins_primero);
  7.     aux_nodo->modificar_siguiente(this->inicio_lista); 
  8.     this->inicio_lista = aux_nodo;
  9.    
  10.     if (this->numero_personajes == 0)
  11.         this->final_lista = aux_nodo;
  12.     else
  13.         aux_nodo->obtener_siguiente()->modificar_anterior(aux_nodo);
  14.    
  15.     this->numero_personajes++;
  16. }
  17.  
Lo peor de todo es que ya tuve problemas con los métodos de la lista dinámica, los depuré y finalmente funcionaban. Es algún problema de punteros, pero no sé dónde puede estar. Aquí les dejo el adjunto con el código (necesita la Allegro, si saco tiempo intentaré poner una versión con el mismo error y que no lo necesite).

[attachment=0:2cijv3ry]cirtema.7z[/attachment:2cijv3ry]
Necesita un par de imágenes llamadas "fondo.pcx" y "ovni.pcx" en la misma carpeta. Poned cualesquiera PCXs.

Me estoy volviendo loco  :wacko: Gracias de antemano.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
« última modificación: Martes 28 de Abril de 2009, 11:48 por m0skit0 »

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Salto ilógico a método
« Respuesta #1 en: Martes 28 de Abril de 2009, 11:47 »
0
He modificado

Código: C++
  1. cNodoListaPersonajes::modificar_personaje(cPersonaje mod_personaje);
  2.  
a

Código: C++
  1. cNodoListaPersonajes::modificar_personaje(cPersonaje *mod_personaje);
  2.  
(cambiando lo que corresponde al ser ahora un puntero) y funciona. No me pregunten por qué.  :hitcomp:  :brickwall: