1、大学学习C/C++时,在写.h文件时游戏源码写在哪,发现文件中没有符号,就会#include相关头文件; 当我编写.cpp文件时,我发现文件中有一个符号。 如果它不存在,我也会 #include 它,并且没有问题。
2.后来才知道#include是预编译的,意思是把一个文件的全部内容复制到当前#include语句的位置,但是编译器根本不编译.h,以及里面的内容。
然后我已经很久没有用C/C++做很复杂的程序了,直到明天……当我封装整个DirectDrawManager的时候,我就SB了。
我想:“不管怎样,如果.h没有被编译,我就在.cpp中写出要使用的符号的#include语句,在.cpp中写出.h,然后在这个#include下面#include我自己。” 就是这样。 这样会先加载所有相关的符号声明,然后粘贴我的.h文件,这样编译的时候就不会出错了,而且我感觉一下子就很清楚#include是什么了,因为都在.cpp里了,而且.h 中没有#included 任何内容。”
然后我编译了前面的.cpp文件,就成功了。 哇,感觉真好!
然后我构建了整个项目,总共有数百个错误。 哇,太酷了!
从SB来看,我想:“.cpp已经过去了,没有未定义或重复的定义?!我是不是记错了……我也不能检测到.h吗?!”
于是我把.cpp中所有的#include语句都放到了自己的.h文件中(#include "self.h"除外),构建成功了!
哈哈哈,我真的记错了!
SB! 突然一个下意识的声音从我的后脑勺传来~“预编译就是预编译,你到底怎么能察觉到.h!你就是个SB,还长得这么漂亮!”
为了不被自己的良心抗议,我继续尝试着改变各种形式。 终于,我发现了我的SB,并能够给出本文标题的答案。
#include就是复制一个文件游戏源码写在哪,把这个类相关的头的#include写到.cpp上。 这个.cpp没有问题,但关键是其他文件使用了这个类。 如果你#include了这个类的头文件,但是由于这个类的头文件没有引用与这个头文件相关的其他类的头文件,所以用户编译时会出现符号未找到的错误。
因此,如果 .h 中存在依赖符号,则应将它们 #included 到 .h 中。 如果.cpp中有依赖符号,则#include应该写在.cpp中。
这样,当#include复制一个文件时,所有相关的依赖符号也会被复制进去。
自查完毕!