Conozco las dependencias circulares, pero incluso con las declaraciones de reenvío obtengo esta área. ¿Qué estoy haciendo mal?Uso no válido de estructura de tipo incompleta, incluso con la declaración de reenvío
// facility.h
class Area;
class Facility {
public:
Facility();
Area* getAreaThisIn();
void setAreaThisIsIn(Area* area);
private:
Area* __area;
};
// facility.cpp
#include "facility.h"
#include "area.h"
{ ... }
// area.h
class Facility;
class Area {
public:
Area(int ID);
int getId();
private:
std::list<Facility*> _facilities;
};
// area.cpp
#include "area.h"
#include "facility.h"
Así que esto compila bien, pero si lo hago
// foo.h
#include "facility.h"
class Foo { .. };
// foo.cpp
#include "foo.h"
void Foo::function() {
Facility* f = new Facility();
int id = f->getAreaThisIsIn()->getId();
Cuando llego invalid use of incomplete type struct Area
¿Ha incluido ** area.h ** en el archivo que está definiendo 'Foo :: function()'? –
He intentado compilar esto con g ++ (agregando definiciones de stub de los métodos 'Facility' y' Area') después de corregir el error tipográfico 'getAreaThisIn()' en 'facility.h' (debería ser' getAreaThisIsIn() ') y compilado para mí. Aunque mi 'Foo.cpp' sí incluía ambos encabezados. – QuantumMechanic
Tenga en cuenta que los identificadores que comienzan con dos guiones bajos ('__rea' lo estoy mirando) están reservados por la implementación y no deben utilizarse. –