我知道循环依赖关系,但即使有前向声明,我也会得到这个区域。 我在做什么错?不完整类型结构的使用无效,即使有前向声明
// 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