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

Problema referencias cruzadas C++

Estas en el tema de Problema referencias cruzadas C++ en el foro de C/C++ en Foros del Web. Hola, he estado leyendo por la web sobre referencias cruzadas, y después de leer y mucho leer sigo con mi problema, os cuento el caso. ...
  #1 (permalink)  
Antiguo 26/03/2009, 03:09
 
Fecha de Ingreso: marzo-2009
Mensajes: 3
Antigüedad: 15 años, 1 mes
Puntos: 0
Problema referencias cruzadas C++

Hola, he estado leyendo por la web sobre referencias cruzadas, y después de leer y mucho leer sigo con mi problema, os cuento el caso.

Tengo una clase Motor que "crea" dos clases (que heredan de Threads y de superclase) Clase1 y Clase2, mi problema es que quiero que estas clases a su vez puedan llamar a funciones de la clase MotorJuego que hereda de motor. (En Motor.h y MotorJuego.h defino la clase y los métodos, en el código siguiente lo pongo todo en el cpp para facilitar el entendimiento)

Os pongo parte del código (no funciona porque tengo includes infinitos):

---
Código c++:
Ver original
  1. #include <QThread>
  2. #include "includes.cpp"
  3. class motor
  4. {
  5. superclase *a, *b;
  6. public:
  7.  void motor::inicializate_play()
  8.     {
  9.     a = new programaA::clase(this) ;
  10.     b = new programaB::clase(this) ;
  11.     a->inicializate();;
  12.     a->run();  
  13.     }
  14. };

---
Código c++:
Ver original
  1. #include "motor.h"
  2. class motorJuego: public motor
  3. {
  4. public:
  5.     qDebug("Estoy avanzando");
  6.     if (s==a)
  7.     {
  8.         qDebug("Soy clase1");
  9.     }
  10.     else if (s==b)
  11.     {
  12.         qDebug("Soy clase2");
  13.     }
  14.     else qDebug ("Algo está mal");
  15. }
  16. };

---
Código c++:
Ver original
  1. #include "motorJuego.h"
  2.  
  3. class superclase: public QThread{
  4. public:
  5. virtual void run(){}
  6. void inicializate()
  7. {
  8.     hecho=0;
  9. }
  10. protected:
  11. int hecho;
  12. void avanzar(motorJuego *m, superclase *s)
  13. {
  14.     qDebug("Voy a avanzar");
  15.     m->update_pos_player(s);
  16. }
  17. };

---
Código c++:
Ver original
  1. #include "superclase.cpp"
  2.  
  3. class clase: public superclase {
  4. public:
  5. clase (motorJuego *m)
  6. {
  7.     mot=m;
  8. }
  9.  
  10. void run() {
  11.     if (hecho==0) //inicializate
  12.     {
  13.         qDebug("Inicio 1") ;
  14.     } else if (hecho==1) //move
  15.     {
  16.         qDebug("Muevo 1") ;
  17.         avanzar(mot,this);
  18.     }
  19. }
  20. private:
  21. motorJuego *mot;
  22. };

---

Y el includes.cpp
Código c++:
Ver original
  1. #include <stdio.h>
  2. namespace programaA {
  3. #include "codigo1.cpp"
  4. }
  5. namespace programaB {
  6. #include "codigo2.cpp"
  7. }
Perdon por todo este rollo y a ver si alguien me puede ayudar, desde ya, gracias.
  #2 (permalink)  
Antiguo 26/03/2009, 05:01
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Problema referencias cruzadas C++

No incluyas codigo (.cpp) sino cabeceras (.h o .hpp si queres) y para evitar definir mas de una vez una cabecera hace esto:

Código:
#ifndef _NOMBRE_CABECERA_
#define _NOMBRE_CABECERA_

//la cabecera en si misma

#endif
PD. #pragma once no viene mal tampoco si lo soporta tu compilador.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
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 16:56.