我知道循環依賴關係,但即使有前向聲明,我也會得到這個區域。 我在做什麼錯?不完整類型結構的使用無效,即使有前向聲明
// 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"
所以這個編譯罰款,但如果我不
// foo.h
#include "facility.h"
class Foo { .. };
// foo.cpp
#include "foo.h"
void Foo::function() {
Facility* f = new Facility();
int id = f->getAreaThisIsIn()->getId();
當我invalid use of incomplete type struct Area
您是否在您定義的'Foo :: function()'的任何文件中包含了** area.h **? – 2011-04-04 19:30:40
我修正了'facility.h'中的'getAreaThisIn()'輸入錯誤(應該是'getAreaThisIsIn()')並且修正了g ++(在'Facility'和'Area'方法的存根定義中添加了')它爲我編譯。雖然我的'Foo.cpp'確實包含了兩個頭文件。 – QuantumMechanic 2011-04-04 19:40:36
請注意,以兩個下劃線開頭的標識符(我在看你的'__area')由實現保留,不應使用。 – 2011-04-04 19:41:00