如何处理大量的头文件?

时间:2014-10-12 02:22:03

标签: c++ include header-files organization

由于我已经完成了我的程序,所以我已经达到了大约30多个头文件的地步。

当我开始时,我有一个一体化的标题,链接到我最新的所有头文件,以及我需要的项目库。

使用这种格式,我只需要花费5+分钟就可以通过更改变量名称或类似的小东西来重新编译整个程序。

我之前的计划是制作所有标题的“Tier List”,其中最基本的标题位于底部,下一级标题需要这些标题,依此类推,直到我进入main.cpp文件。 (第2层需要第1层中最高的,依此类推)。在这个想法之后,我最终转向制作文件夹组,并且如果我需要该目录中的所有内容,则会有一个Folder.hpp文件。

现在编译的时候,当包含命令就在我的面前时,我立即被语法错误所淹没,说没有正确包含任何东西。

以下是一些标头,根据其中一个语法错误:

===Character.hpp===
#include "../../Pre.hpp"
#include "../Assets/Folder.hpp"
#include "../Control/Folder.hpp"
#include "../WorldObj.hpp"

===Control/Folder.hpp===
#include "CommonStat.hpp"
#include "DeathHandler.hpp"
#include "EnergySys.hpp"
#include "FactionHandler.hpp"
#include "Interaction.hpp"
#include "Warper.hpp"
#include "WeaponPos.hpp"

===WeaponPos.hpp===

struct WeaponPos{};
===Build Message===
Build Message: error: 'WeaponPos' does not name a type

===NOTE===
The #include lines are the only (seemingly) important portions of the code. the 'struct WeaponPos' is only to show where it is located in terms of the syntax error.

WeaponPos myWpnPos is a variable of Character忘了包含那张便条。

正确有效地组织头文件的好方法是什么,以便在编译源文件时都对它们负责?

我在Windows 7 64位上使用Code::Blocks和MinGW GCC 4.7。

1 个答案:

答案 0 :(得分:1)

这绝不能解决您的整个问题,但值得知道它存在,并且它可能实际上有助于您未来的设计决策。

由于一个小的改变而导致长时间重新编译的方法之一是PIMPL idion - 一般的想法是与该类的所有私有成员有一个单独的struct。结构在头文件中向前声明,并在类的cpp文件中定义。因此,当您在私有结构中添加/重命名字段时,标题根本不会发生变化,因此不需要重新编译链接到它的其他标题。

Much better description with examples

另一个要点是不要创建包含标题的级别 - 只有在真正需要时才应包含标题。这方面的好例子是前瞻性声明。如果在Class2中将Class1作为指针成员,则不必在Class2.h中实际包含Class1.h - 通常足以转发声明Class1然后在Class2.cpp文件中包含标头 - 这大大减少了重新编译。

总结一下:

  • 使用PIMPL
  • 当你可以
  • 时向前声明并包含在cpp中
  • 不包含在您不必