title: Invalid use of incomplete type struct, even with forward declaration
body: <p>I'm aware of circular dependencies, but even with forward declarations I get this area.
  What am I doing wrong?</p>
  
  <pre><code>// 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&lt;Facility*&gt; _facilities;
  };
  
  // area.cpp
  #include "area.h"
  #include "facility.h"
  </code></pre>
  
  <p>So this compiles fine, but if I do</p>
  
  <pre><code>// foo.h
  #include "facility.h"
  class Foo { .. };
  
  // foo.cpp
  #include "foo.h"
  void Foo::function() {
      Facility* f = new Facility();
      int id = f-&gt;getAreaThisIsIn()-&gt;getId();
  </code></pre>
  
  <p>When I get <code>invalid use of incomplete type struct Area</code></p>