在c++中排列头文件
arranging the header files in c++
我正在为我的大学做一个项目,然后出现了一个问题。我知道是时候回到这里了。
有许多文件(10-12..对我来说太多了),每个都有一个头文件。我创建了单独的文件夹,如:
注册目录:RegistersName.h注册.h(* ==对应的cpp)文件*.cpp
数据库目录:RegisterDB.h InstructionDB.h *.cpp
指令目录:instruction .h *.cpp
编译文件夹:Compiler.h *.cpp
命令目录:Command.h *.cpp
现在这些头文件中的许多都是"看到"彼此,因此我必须包含它们…
应该包括
吗?#include "../Database/RegisterDB.h"
#include "../Register/Register.h"
#include "../Register/RegistersName.h"
我真诚地认为那不是写作的方式。因为到处移动一些文件会毁了整个项目。请给我指路。
谢谢你每次都帮我。
一定要跳过使用..
的相对寻址,因为一定要增加耦合。
您可以将项目目录添加到包含路径中(但是在构建系统中是这样做的),并包含
#include "Database/RegisterDB.h"
#include "Register/Register.h"
如果你觉得它们是应该分开保存的"子项目"。
您的每个包含文件都应该有一个 include Guard。这可以防止头文件被意外地包含多次。
每个源文件都应该包含所有所需的头文件。不要喜欢通过包含其他头文件来包含头文件,而要单独包含源文件中需要的每个文件,这避免了如果某些头文件不再需要并被删除,那么您将陷入编译错误的惨败,如果特定的头文件包含一些其他需要的头文件。
将包含的所有路径添加到包含路径中,这样您就不必在包含时使用显式的路径提及。
如果你有循环依赖,你可以使用类型的前向声明来通过
#include语句应该排序和分组。请参阅c++编程风格指南和Stackoverflow线程-使用c++头文件的最佳实践。
#include "app/Database/RegisterDB.h"
#include "app/Register/Register.h"
#include "app/Register/RegistersName.h"
是的,移动头文件将意味着您必须修复这些包含。但是如果你必须包含,你必须包含…
问题是你是否真的必须在其他头中包含头?有时需要这样做,例如,如果一个类继承自另一个类。但有时人们在应该只在源文件中包含头文件时,却在另一个头文件中包含头文件。因此,请确保这里没有创建不必要的耦合。例如,是否编译器类的所有用户也必须使用来自RegisterDB类的东西?或者它是一个实现细节,因此应该只包含在Compiler.cpp中?
- .cpp和.h文件中的模板专用化声明
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 如何从 C 文件将引脚排列与 esp8266 一起使用?
- 问题 - 递归函数以返回文本文件排列
- 按线排列,通过轻重解析器解析巨大的XML文件
- 已知格式化文件中的数据排列
- 检查文本文件是否按字母顺序排列
- 如果两个类必须相互包含,我应该如何排列它们的头文件并避免不完整的类型
- 在c++中排列头文件
- 列出Unix目录中按大小排列的前10个文件