Sé que se han hecho preguntas similares a esta antes, pero después de hacer mi investigación todavía tengo preguntas sobre el encabezado circular incluye.C++ header circular incluye
//FooA.h
#ifndef H_FOOA
#define H_FOOA
#include "foob.h"
class FooA{
public:
FooB *fooB;
};
//FooB.h
#ifndef H_FOOB
#define H_FOOB
class FooA;
class FooB{
public:
FooA *fooA;
};
Ahora, si tengo dos dependencias circulares, esta es la forma en que he visto a personas en stackoverflow solucionar el problema. Mi único problema con esto es que en mi main.cpp que debe incluir fooa.h primero y luego foob.h
//main.cpp the right way
#include "fooa.h"
#include "foob.h"
//main.cpp that will surely get a compile error
#include "foob.h"
#include "fooa.h"
Ahora mi pregunta es "¿Hay una manera de reenviar declarar estas clases de una manera que se ¿me permite no importarme el orden en que incluyo los archivos de encabezado en mi main.cpp? "
Como las respuestas han señalado, se puede utilizar una declaración adelantada en ambos archivos. Si la situación fuera más complicada, podría '#incluir" fooa.h "' de 'foob.h', lo que garantizaría el orden de inclusión que desea. –
No hay nada circular en las inclusiones en el código de ejemplo. Si agrega el # endif faltante todo está bien. ¿Qué error de compilación estás obteniendo? –