我正在制作游戏,我在他们的代码中有一个名为Man
的类和一个名为Block
的类,它们彼此都需要,但它们处于单独的文件中。有没有办法“预定义”一个班级?就像Objective-C的@class宏一样?
答案 0 :(得分:11)
是
class Man;
这会将Man
声明为“不完整类型”。您可以声明指针或对它的引用以及其他一些内容,但是您无法创建实例或访问它的成员。这不是对不完整类型可以做什么和不做什么的完整描述,但这是一般的想法。
答案 1 :(得分:5)
它被称为循环依赖。在Class.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;
};
上面两个例子无法编译的原因是因为虽然编译器知道有一个类,但它不知道一类可能包含哪些字段,方法或虚方法,因为只定义了名称,而不是实际的类定义。