1

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

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

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

我现在正在考虑是否应该重构这个结构头文件并将结构声明和定义分离到每个结构的单独 h/cpp 文件中。尽管如果不使用 Visual Studio 中的重构工具来执行此操作会很痛苦且耗时,但这是解决此类问题的好方法吗?

PS:这个问题与以下问题有关:头文件中的多个类与每个类的单个头文件

4

1 回答 1

2

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

批量执行的优点是您将非常快速地完成代码(与增量相比),但是如果您最终遇到一些错误,则可能需要很长时间才能修复它。

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

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

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

我已经发现对创建自给自足的头文件很有用的是预编译您的头文件。如果您没有包含正确的数据,此编译将失败。

于 2016-03-20T11:28:14.390 回答