c++ - 合并头文件和cpp文件

标签 c++ header-files

我正在开发一个 C++ 项目,我在其中将每个类实现为单独的 .h 文件和 .cpp 文件。我发现这不值得麻烦。 - 我在两个文件之间来回编辑 - 这给我带来了很多意想不到的麻烦(必须添加预声明,显式导出模板类) - 我没有看到直接的好处,我的代码库必然会保持相对较小(比如 < 10,000 行代码)并且编译时间并不长。

我的问题有两个方面

a) 我可能错过了将实现和原型(prototype)分开的好处吗?

b) 如果没有,是否有任何免费工具或 ide 能够将 cpp 文件合并回头文件?

最佳答案

不要这样做。对于大多数简单的类,如果您想公开该类以在其他地方使用,您应该始终*在 .h 中声明该类。头文件,以及 .cpp 中的定义(代码)文件。

然后您包括 .h文件在任何你想使用类的地方(即实例化它)。但是,链接器负责在每个 .cpp 之后“链接”代码。单独编译。

我的问题是,“你还会怎么做?”我看到许多 n00bs 犯的一个错误是 #include "foo.c .那么发生的事情是,您不仅失去了独立编译,而且在链接时遇到问题,因为 同一类 有多个定义。记住,当你 #include一个文件,它确实会出现在你说的那个文件的主体中。

[*] 当然也有异常(exception)情况:

一个异常(exception)是模板类。这些必须完整地放在头文件中。原因是因为在使用类型参数实例化类之前不会生成实际代码。然后,编译器基本上在需要时用指定的类型“填充”类的主体。由于类型在此之前未知,因此不能独立编译并稍后链接。

关于c++ - 合并头文件和cpp文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11233756/

相关文章:

c++ - 节省内存的 C++ 字符串(interning、ropes、copy-on-write 等)

c++ - 即使在正确的目录中也找不到头文件?

c++ - '@' 在基于 ctime 的函数中打印出来

c++ - 给定源文件的 header "corresponding"是否有技术名称?

c++ - 链接错误 : Duplicate Symbol

c++ - 为什么在 shared_ptr 只取一个时 unique_ptr 取两个模板参数?

c++ - 从二维数组中的给定索引中找到对角线元素的总和

c++ - flex解析符号-复杂符号

c# - 如何防止应用程序被固定在 Windows 7 中?

C++ 初学者 - 在类内部使用类时遇到问题