C++头文件注意要点 & 编译错误常见错因

由于种fei种chang原lan因duo,至今没写过什么大项目,每次项目里都只有那么两个三头文件,最近想写项目的时候才发觉连头文件互相包含的基本要求都不清楚,只是印象中有过因为头文件而导致编译失败的经历,所以特地查了一下相关的内容,整理在这里

注意要点

修改自 CSDN - C++头文件包含注意要点

方法

在引用一个符号(包括变量,函数,结构,类等)之前确保它已经声明或者已经定义。

  • 最基本的原则,类的头文件中最好不要包含其他头文件。即在设计类时尽量保持类的独立性,使其尽可能不依赖其他类或者函数库,使类的声明不依赖其他类。
  • 如果只有实现中用到了其他的类,那么可以只在该类的实现文件中包含用到的类库或者函数库的头文件。
  • 当类的声明用到其他类库或者函数库时,若声明中引用的是其他类或结构的指针引用或者是函数引用时,可以采用前向引用,即在该类的声明前面先声明一下该类所用到的类名或者函数名。
  • 实际中,如果一个类要用到很多其他的类指针或者结构指针或者函数名时,虽然可以采用上述方法,但将所有用到的类和方法声明一遍比较麻烦
  • 当类声明中引用的是其他类的实例时,只有在该类的声明头文件中引用所引用的类库或者函数库的头文件。

头文件包含顺序

在大型工程设计中,一个类往往需要用到很多已有的类库及函数库,把一个类所用到的所有类库头文件都加入到类的定义头文件中往往也非常麻烦,常用做法是把经常用到的头文件加到一个公共的头文件中。

头文件也有依赖关系,包含顺序错误时可能会导致编译错误。头文件的包含顺序应该是从最特殊到一般。

#include "本类头文件"
#include "本目录头文件"
#include "自己写的工具头文件"
#include "第三方头文件"
#include "平台相关头文件"
#include "C++库头文件"
#include "C库头文件"

无法解析的外部符号常见原因

修改自 CSDN-关于各种无法解析的外部符号问题的相应解决方案

  • lib文件不正确,比如64位的编译配置,结果使用的是32位的lib包.
  • 只写了类声明,但还没有写实现类,造成调用时无法解析
  • 声明和定义没有统一,造成链接不一致,无法解析
  • 没有在项目属性页的链接器的命令行选项加入相应的类包。
  • 没有在c++包含目录和库目录加入相应的类包路径
  • 在测试工程中被测文件目录可能需要包含被测类的cpp定义文件
  • ICE接口测试时,无法解析可能因为被测文件没有包含进相关的cpp文件,另外,在TestSuite_ProjectRun.h文件中需要包含IProjectRun.h头文件,及相关的头文件(举例)。
  • import相关的无法解析内容,解决办法是在链接器的依赖项中加入相应的动态库

你可能感兴趣的:(C++)