Utilisation incorrecte de structure de type incomplète, même avec une déclaration forward

Je suis au courant de dépendances circulaires, mais même avec sa déclaration, j'obtiens cette zone.
Ce que je fais mal?

//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"

Donc cette compile bien, mais si je ne

//foo.h
#include "facility.h"
class Foo { .. };

//foo.cpp
#include "foo.h"
void Foo::function() {
    Facility* f = new Facility();
    int id = f->getAreaThisIsIn()->getId();

Quand je reçois invalid use of incomplete type struct Area

source d'informationauteur robev