2010-07-06 70 views
7

我正在做一个游戏,我有一个叫做Man的类和一个叫做Block的类,他们都需要对方的代码,但它们都在单独的文件中。有没有办法“预定义”一个班级?像Objective-C的@class宏一样?C++:两个需要彼此的类

+2

听起来像你想要的是一个前瞻性声明。 – mooware 2010-07-06 20:37:22

+0

BlockDude +1。 – 2010-07-06 22:42:46

回答

5

它被称为循环依赖。在课堂上Two.h

class One; 

class Two { 
    public: 
    One* oneRef; 
}; 

,并在类One.h

class Two; 

class One { 
    public: 
    Two* twoRef; 
}; 

的 “一类;”和“二级”;指令分别分配一个类名“One”和“Two”;但他们没有定义超出名称的任何其他细节。因此,您可以创建指针类,但不能包括整个类,像这样:

class One; 

class Two : public One { 
}; 

class Three { 
    public: 
    One one; 
}; 

上面两个例子就不能编译的原因是因为当编译器知道有一类一,这不是” t知道可能包含哪些字段,方法或虚方法,因为只定义了名称,而不是实际的类定义。

11

是的。

class Man; 

这将声明Man为“不完整类型”。您可以声明它的指针或引用以及其他一些内容,但不能创建实例或访问它的成员。这不是一个完整的描述,你可以做什么,不能做一个不完整的类型,但这是一般的想法。

+1

需要注意的是,您可以继续并在以后包含完整类型并获得访问权限。您可以在标题中使用不完整的类型,然后将完整的标题定义包含在cpp中以利用它。 – 2010-07-06 20:41:17