把包括放在所有正确的地方
Putting includes in all the right places
所以,我们使用#include
来告诉编译器/链接器在哪里可以找到一个类的所有相关代码。
看看这个:
ClassC.h:
#include "ClassA.h";
ClassD.h:
#include "ClassC.h"
假设我们在ClassD
中使用ClassA
,但是以一种与ClassC
没有任何联系的方式。通过包含ClassC
,我们隐式地包含了它,因此不会抛出错误。但是,如果代码改变并且不再需要ClassC
(并且我们因此删除了#include "ClassC.h"
),我们将得到未定义的引用错误,因为ClassA
现在未被引用。
是否有一种方法可以让编译器/链接器独立查看每个*.cpp和分配的*.h,而无需查看包含的。h文件?
如果是这种情况,它不会查看ClassC.h
并看到它包含ClassA.h
,而是抛出错误或至少警告告诉我没有包含ClassA.h
。这更有意义,因为就ClassD
类所知,ClassA
和ClassC
彼此之间没有连接(在set假设下,我独立于ClassC
使用ClassA
)。
我认为以这种方式编写的代码将更加稳定和灵活。不是吗?
同样,假设我们建立了一个项目,并且它有效。如果我们要在代码中引用某个类(X),而不是之前引用它,那么如果它正在使用其他源中包含的其他类(Y),则可能会得到一个错误,该类在程序中该点和该类之前第一次出现之间。如果我们将include更紧密地绑定到显式使用它的每个头文件,这样的错误就永远不会出现。
我知道我可以自己跟踪所有这些,但是在大型项目中,甚至是中型项目中,很容易错过一些或更多。此外,有一个错误/警告会使它更容易管理。
我知道我把事情弄复杂了一点,但这对我来说似乎是一个很好的实践。
它甚至是一个好主意,它可以以某种方式设置在编译器/链接器选项(例如GNU gcc编译器在CodeBlocks)?
假设我们在类d中使用类a,但以一种不可能的方式连接到ClassC。我们通过包含隐含地包含了它ClassC,因此不会抛出错误。但是,如果代码更改和不再需要ClassC(并且我们删除了#include "ClassC.h")因此,我们会得到未定义的引用错误,因为ClassA是现在未引用。
如果您需要在ClassD
中使用ClassA
,那么在ClassD.h
中显式地使用 #include "ClassA.h"
。不要依赖于隐式包含链。
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 为什么 cmake 许可证<>样式不包括?
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 计算缩放多边形的比例,得到给定的多边形面积
- 计算平均值,不包括上次得分
- QwtPlot具有相等的轴和自动缩放
- 从多个源构造一个对象,包括一个对象向量
- 如何在directx/c++中进行平移/缩放操作
- 在Qt中实现无限可缩放的画布
- 为什么 zlib 放气初始化调用一次不起作用?
- 是否可以为 QPixmap 派生类嵌入缩放方法?
- 形状对象的旋转和缩放不正确C++
- 如何在 OpenSceneGraph 中缩放/旋转/移动资产
- 在编译中包括 Botan 2
- 将一系列整数放入类的最佳方法是什么?
- 将文件放入主目录
- 如何在OpenGL(GLFW,很高兴)中进行2D缩放?
- 将值从另一个数组写入数组,不包括不需要的值 C++
- 包括另一个放气到zopflipng