Problema con includes en c++

Z

Tengo varias clases que se en el que una tiene miembros de otra ,si les pongo includes a todas ,no va ,si uso declaraciones adelantadas tampoco va porque no solo se nombran entre ellas si no que usan funciones y demás...Las clases individualmente no me dan ese problema ,pero al usar la clase que las llama a todas ya me sale el error de tipo incompleto y demás..
la estructura seria

#include "b.h"
class A{
     //aqui uso mienmbros de B
}

#include "a.h"
class B{
     //aquí uso miembros de A
}

esto no va

#include "b.h"
class A{
     //aqui uso mienmbros de B
}

class A;
class B{
     //aqui uso mienmbros de A
}

esto no va porque uso un tipo incompleto me avisa el compilador,entonces me desespero y uso esto

#include "b.h"
class B;
class A{
     //aqui uso mienmbros de B
}
#include "a.h"
class A;
class B{
     //aqui uso mienmbros de A
}

y tampoco va....

elkaoD

Échale un vistazo a http://stackoverflow.com/questions/9119236/c-class-forward-declaration

Si haces el forward declaration no hay que hacer #include, y si usas "new" en la otra clase hay que hacer movidillas adicionales.

1 respuesta
Z

#2 Es que probe de todas las maneras que se y todas fallan ,con include ,sin include y con declaracion adelantada con las 2 ...y no hay manera
Las dos clases usan meotodos de la otra ,si almenos una no usase metodos de otra podria usar la declaracion adelantada pero siendo asi...

cabron

No sé si has puesto ese ejemplo por simplificar, o realmente tienes una dependencia circular.

Esto normalmente deberías evitarlo, ya que hace difícil tanto el desarrollo como las pruebas unitarias (no puedes terminar de probar la clase hasta que no termines de desarrollar otra clase que necesita que primero hayas terminado la clase que no puedes terminar....)

Normalmente cuando tienes una clase A que depende de B y a su vez B depende de A, el problema suele ser que hay una tercera clase C que no has identificado. Mueve las partes de A y B que correspondan a C, y haz que A y B dependan de C, y no entre ellas.

1 respuesta
Z

#4 Si que hay una clase c, A depende de B ,B depende de A y A también depende de C .El problema es que el diseño delas clases no lo puedo tocar.

1 respuesta
r2d2rigo

#5 en los .h jamas tienes que tener nada de funcionalidad. Hacer un forward declaration solo te da libertad para declarar variables de ese tipo, pero no puedes hacer nada mas ahi. Mueve todo el codigo en el que accedes a miembros de los tipos A y B a los .cpp para que no falle.

3 1 respuesta
Z

#6 Era eso,gracias

Usuarios habituales