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

Multiple structures defined inside a header file - Should I move them out in separate h and cpp files

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

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

为了解决许多此类问题,我将包含此头文件的内容从其他头文件移至 cpp 文件(只要可能),并仅使用相关结构的前向声明。我仍然继续遇到奇怪的多重定义错误,例如 "fatal error LNK1169: one or more multiply defined symbols found"。

我现在正在考虑是否应该重构这个结构头文件,并将每个结构的结构声明和定义分开在单独的 h/cpp 文件中。尽管 Visual Studio 中没有重构工具这样做会很痛苦且耗时,但这是解决此类问题的好方法吗?

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

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

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

逐步执行此操作并将 classes 一个接一个地拆分,可以降低出现耗时错误的风险,但是这会花费更多时间。

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

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

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