What does a semicolon after a class name do? 
我在读的书中注意到这样的代码行:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 
 | namespace sf{
 class RenderWindow;
 }
 
 class StateStack;
 class Player;
 
 class State
 {
 // Code for the class
 };
 | 
仅包含类、类名和分号的行是什么意思?
		
		
- 也许这会有所帮助:stackoverflow.com/questions/1410563/…
 
	 
这是前向声明。他们让我们知道下面的代码有一个RenderWindow类名称,StateStack和Player。本论文的第一个编译器,当它用于湖的名字。在左后想找到类的定义。
		
		
- 好吧,那么使用这个有什么好处呢?似乎只将文件包含在该类中更容易?
- @Connor的优势出现在A类使用B类和B类使用A类的情况下。这需要一个前向声明,因为如果您在B.h中使用#include"A.h",反之亦然,您将得到一个无限循环以及同一类的重复定义。
- 哦,好吧,这很有道理,谢谢你的帮助!
- @康纳,它只是让编译器知道它的存在,而没有真正存在的完整类。
- "以后的链接器"-->"以后的编译器"。
- @MattmcNabb我支持我的原始答案。forward声明告诉编译器类存在。链接器找出类的代码在哪里。
- 是编译器找到类的定义。链接不将类定义与类前向声明匹配(但它将函数定义与函数声明匹配,将非成员变量定义与非成员变量声明匹配)。类定义必须是可见的,编译器才能编译依赖于类定义的任何代码。
- @mattmcnab如果在使用时需要完整的定义,编译器会抱怨。casper von b指出,只有在不需要完整定义的情况下才需要前向引用,例如指针或引用。
 
	 
这是一个前馈信号不明确,它的定义是,在后续的编译全想的地方。
这是主用例的用例,你不需要完整的定义,例如,如果你有一个指针的类型T你不需要完整的定义和其T直到instantiation因此不需要有一个T*宣言。
		
		
- 这是必要的,因为编译器的简单性质,没有查找,如果它没有在翻译单元中声明,它就不存在。