我正在更新一些代码,当我在标题中工作时,我遇到了以下行。
.
.
.
class HereIsMyClass;
.
.
.
就是这样。它只是在另一个更长的类定义之前的一行。HereIsMyClass 实际上是其他地方的另一个类,但我不明白为什么要在这里写这行。它有什么作用?
我正在更新一些代码,当我在标题中工作时,我遇到了以下行。
.
.
.
class HereIsMyClass;
.
.
.
就是这样。它只是在另一个更长的类定义之前的一行。HereIsMyClass 实际上是其他地方的另一个类,但我不明白为什么要在这里写这行。它有什么作用?
C++ 中的这一行是前向声明。它表明在未来的某个时候,可能会存在一个名为 HereIsMyClass 的类。它允许您在完全定义之前在声明中使用类。
它对分解循环依赖的类和头文件管理都有帮助。
例如
class HereIsMyClass;
class Foo {
void Bar(HereIsMyClass* p1) ...
};
class HereIsMyClass {
void Function(Foo f1);
}
这就是所谓的预先声明。当 HereIsMyClass 的实际声明位于文件的更下方时,或者在文件更下方包含的另一个#include 中时,可能在此行之后有一个使用 HereIsMyClass 的类定义。
如果您没有该行,则该文件可能无法编译。
这称为“前向声明”,本质上是对稍后定义此类的承诺。具有前向声明允许您声明指针,HereIsMyClass
而不必包含它的头文件,但不包含它的实际对象,因为HereIsMyClass
编译器仍然不知道对象的大小。
class HereIsMyClass;
class Foo
{
private:
HereIsMyClass *pointer; // works
HereIsMYClass object; // compiler error!
};
前向声明不会告诉编译器类的成员,所以你仍然需要在实际使用它时包含完整的类定义(头文件),即访问它的成员。