在我正在阅读的书中,我注意到了这样的代码行:
namespace sf
{
class RenderWindow;
}
class StateStack;
class Player;
class State
{
// Code for the class
};
只有class,classname和分号的行是什么意思?
答案 0 :(得分:10)
这些是前瞻性声明。他们让以下代码知道有些名称为RenderWindow
,StateStack
和Player
的类。当它看到使用这些名称时,这满足了编译器。稍后链接器将找到类的定义。
答案 1 :(得分:4)
这是一个前向声明,基本上它向编译器发出信号,表明完整定义将在其他地方发布。
此主要用例是您不需要完整定义的情况,例如,如果您的指针类型为T
,则不需要T
的完整定义直到实例化,因此不需要声明T*
。