Foros del Web » Programación para mayores de 30 ;) » Programación General »

Recursividad infinita usando #include (C++)

Estas en el tema de Recursividad infinita usando #include (C++) en el foro de Programación General en Foros del Web. Hola a todos! Tengo dos estructuras de datos como a continuación: En el fichero objeto.h Código: class Objeto{ ... }; Y en el fichero escena.h ...
  #1 (permalink)  
Antiguo 28/07/2005, 10:18
 
Fecha de Ingreso: octubre-2004
Ubicación: Cork (Irlanda)
Mensajes: 161
Antigüedad: 19 años, 6 meses
Puntos: 1
Recursividad infinita usando #include (C++)

Hola a todos!

Tengo dos estructuras de datos como a continuación:

En el fichero objeto.h

Código:
class Objeto{
  ...
};
Y en el fichero escena.h

Código:
#include <vector>
#include "objeto.h"

class Escena{
  ...
  void addObjeto(Objeto *o);
  std::vector<Objeto*> objetos;
  ...
};
Ahora bien, en la clase Objeto necesito tener una referencia a la Escena en la que está incluido y he pensado escribir el fichero objeto.h así:

Código:
#include "escena.h"

class Objeto{
  ...
  Escena *e;
};
Como supongo que habréis deducido... me salen un montón de errores al compilar por la recursividad que suponen los includes...

¿A alguien le ha sucedido algo parecido? ¿Sabéis como resolverlo?

Muchas gracias!

P.D. La solución de juntar las dos clases en un mismo fichero no me sirve
  #2 (permalink)  
Antiguo 28/07/2005, 11:26
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
yo en un proyecto que estoy haciendo tambien tengo asi.
Solo que el
#include "escena.h"
lo pongo el .cpp de de la clase objeto, no el .h y con eso ya no me causa ningun problema.
Saludos
  #3 (permalink)  
Antiguo 28/07/2005, 12:02
 
Fecha de Ingreso: octubre-2004
Ubicación: Cork (Irlanda)
Mensajes: 161
Antigüedad: 19 años, 6 meses
Puntos: 1
Nada... no me funciona...
  #4 (permalink)  
Antiguo 28/07/2005, 12:10
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 19 años, 11 meses
Puntos: 74
¿Para que queres un puntero a un objeto de tipo Escena dentro de la clase Objeto? Si es solo para identificarlo podes usar un void * y un casting ...
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 28/07/2005, 12:35
 
Fecha de Ingreso: octubre-2004
Ubicación: Cork (Irlanda)
Mensajes: 161
Antigüedad: 19 años, 6 meses
Puntos: 1
Ya se me había ocurrido eso... pero la solución me parecia algo cutre y no lo probé...

Ahora que me has hecho memoria lo he probado y por lo menos compila...
  #6 (permalink)  
Antiguo 28/07/2005, 13:59
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 19 años, 11 meses
Puntos: 74
Es pobre pero muy usado
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #7 (permalink)  
Antiguo 28/07/2005, 16:02
 
Fecha de Ingreso: octubre-2004
Ubicación: Cork (Irlanda)
Mensajes: 161
Antigüedad: 19 años, 6 meses
Puntos: 1
Ahora que lo he probado me ha salido un error que no me esperaba..

Cuando hago:

Código:
unobjeto->scene->metodo();
Es decir, cuando desde el objeto llamo un método de la escena, el compilador me dice:

Código:
error C2227: left of '->metodo()' must point to class/struct/union
Cuando asigné el objeto a la escena lo hice de la siguiente forma:

Código:
unobjeto->scene = (Escena*)this;
¿Alguna sugerencia? Muchas gracias de nuevo.
  #8 (permalink)  
Antiguo 28/07/2005, 16:04
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 19 años, 11 meses
Puntos: 74
Tene en cuenta que scene en este caso es un VOID * y lo queres utilizar como si fuera un Escena * entonces:

Escena *thisScene = (Escena*)unobjeto->scene;
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #9 (permalink)  
Antiguo 28/07/2005, 16:24
 
Fecha de Ingreso: octubre-2004
Ubicación: Cork (Irlanda)
Mensajes: 161
Antigüedad: 19 años, 6 meses
Puntos: 1
Pero si hago eso no funciona, porque el identificador Escena no lo reconoce ya que no lo puedo incluir por todo lo explicado antes...

... si pudiera hacer eso... para que todo el rollo de poner void * ? simplemente pondria Escena * y listo.
  #10 (permalink)  
Antiguo 28/07/2005, 16:30
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 19 años, 11 meses
Puntos: 74
El problema entonces es el diseño, esa solucion no era para que pudieras usar Escena desde Objeto.h/cpp, era para que pudieras identificar a que Escena pertenece un Objeto.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #11 (permalink)  
Antiguo 28/07/2005, 16:32
 
Fecha de Ingreso: octubre-2004
Ubicación: Cork (Irlanda)
Mensajes: 161
Antigüedad: 19 años, 6 meses
Puntos: 1
Ok, pensaré un diseño adecuado. Gracias por tu ayuda.
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 05:45.