【发布时间】:2011-04-04 19:27:39
【问题描述】:
我知道循环依赖,但即使使用前向声明,我也能得到这个区域。 我做错了什么?
// 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
【问题讨论】:
-
您是否将 area.h 包含在您定义
Foo::function()的任何文件中? -
在纠正
facility.h中的getAreaThisIn()错字后,我尝试使用g++ 编译它(添加Facility和Area方法的存根定义)(应该是getAreaThisIsIn())它为我编译。虽然我的Foo.cpp确实包含了两个标题。 -
请注意,以下划线开头的标识符(
__area我在看你)由实现保留,不应使用。 -
注意:我会编辑掉错别字,但由于这篇文章主要是代码,它不会让我这样做,除非我重写整个问题