头文件中定义的多个结构 - 我应该在单独的h和cpp文件中移出它们

时间:2016-03-20 11:07:52

标签: c++ header-files file-organization

我之前的一位同事写了一个巨大的头文件,它有大约100多个具有内联成员函数定义的结构。这个结构文件包含在大多数类实现(cpp文件)和头文件中(不知道为什么我的同事没有使用前向声明)

阅读如此庞大的头文件不仅是一场噩梦,而且由于编译器不时会抱怨多个定义和循环引用而难以跟踪问题。总体编译过程也很慢。

为了解决许多这样的问题,我将这个头文件从其他头文件包含到cpp文件(尽可能),并使用了仅相关结构的前向声明。仍然我继续得到奇怪的多重定义错误,如"致命错误LNK1169:找到一个或多个多重定义的符号"。

我现在正在考虑是否应该重构此结构头文件,并在每个结构的单独h / cpp文件中分离结构声明和定义。虽然在没有Visual Studio中的重构工具的情况下执行此操作会很痛苦且耗时,但这是解决此类问题的好方法吗?

PS:此问题与以下问题有关:Multiple classes in a header file vs. a single header file per class

1 个答案:

答案 0 :(得分:2)

当受到这样的重大重构的挑战时,您很可能会采用以下方法之一:批量重构或逐步重构。

批量执行此操作的好处是,您将非常快速地执行代码(与增量相比)但是如果您最终遇到某些错误,则可能需要花费相当多的时间才能修复它。

逐步执行此操作并逐个拆分类,可以降低耗时错误的风险,但需要更多时间。

就个人而言,我会尝试将两种方法结合起来:

  • 将每个班级,一个接一个(从上到下)分成不同的翻译单元
  • 但是保留主要的包含文件,并替换所有被归类的包括
  • 之后,您可以删除此主要头文件的包含,并将其替换为单数类
  • 最后,删除主要的头文件

我已经发现用于创建自给自足的头文件的一些东西是预编译头文件。如果未包含正确的数据,此编辑将失败。