C++:两个需要彼此的类

Joh*_*sen 7 c++ oop

我正在制作一个游戏,我有一个叫做的类Man和一个Block在他们的代码中调用的类,它们都需要彼此,但它们都是单独的文件.有没有办法"预定义"一个班级?像Objective-C的@class宏?

Fre*_*son 11

是.

class Man;
Run Code Online (Sandbox Code Playgroud)

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


Edw*_*uck 5

它被称为循环依赖.在Class Two.h中

class One;

class Two {
  public:
    One* oneRef;
};
Run Code Online (Sandbox Code Playgroud)

在One.h课程中

class Two;

class One {
  public:
    Two* twoRef;
};
Run Code Online (Sandbox Code Playgroud)

"一级;" 和"二级;" 指令分别分配一个类名"One"和"Two"; 但他们没有定义名称之外的任何其他细节.因此,您可以在类中创建指针,但不能像这样包含整个类:

class One;

class Two : public One {
};

class Three {
  public:
    One one;
};
Run Code Online (Sandbox Code Playgroud)

上面两个例子不能编译的原因是因为虽然编译器知道有一个类,但它不知道一类可能包含哪些字段,方法或虚方法,因为只定义了名称,而不是实际的类定义.