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

努拉卜

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

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

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

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

PS:此问题与以下问题有关:头文件中有多个类,而每个类中只有一个头文件

JVApen

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

批量执行此操作的优点是,您可以非常快速地(相对于增量方式)遍历代码,但是如果最终遇到一些错误,则可能需要花费大量时间才能将其修复。

逐步执行此操作并逐一拆分类,可以减少耗时的错误的风险,但是这将花费更多时间。

我个人将尝试将两种方法结合起来:

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

我已经发现对于创建自足的头文件有用的事情是预编译头。如果您未包含正确的数据,则该编译将失败。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

检索头文件中定义的结构列表

C-头文件中的结构定义

头文件中const变量的多个定义

头文件中的缩写结构重定义是否符合标准?

单独的头文件中的C ++结构原型

将不透明的结构定义放入单独的头文件中

如何在头文件中声明结构并在.c文件中定义

C ++中的多个类定义错误,我的头文件有问题吗?

单个头文件中的命名空间和类及其方法定义如何在多个头文件或cpp文件中使用呢?

在C ++中,当在源文件中定义数据结构时,如何在头文件中声明数据结构?

识别C头文件中的结构

在头文件中找不到结构

多个文件使用的头文件中的结构声明导致体系结构x86_64的重复符号

在C ++中的头文件中,单独的.cpp文件中编写的类的成员函数的定义

在C头文件中定义的自引用结构会产生错误

为什么在头文件中定义函数会产生多个定义错误,而不是类?

C++ 编译不同的 .cpp 文件,将它们包含在头文件中

在头文件中返回多个值

在C中链接多个头文件

在Visual Studio中为函数定义和头文件编译单独的.cpp文件

头文件中定义的函数的原型错误

避免在头文件中定义模板

在头文件中定义类是否正确?

C头文件中的外部定义常量

头文件中定义的函数的重复符号

Bindgen跳过C ++头文件中的定义

头文件中的函数未定义

在C ++中链接结构和函数而无需头文件

头文件中的结构在源文件中产生错误