我正在开发一个C ++项目,我将每个类都实现为一个单独的.h文件和.cpp文件。我发现这不值得麻烦。 - 我在两个文件之间来回编辑 - 它给我带来了许多意想不到的麻烦(必须添加预先声明,显式导出模板化类) - 我没有看到直接的好处,我的代码库必然会保持相对较小(比如说< 10,000行代码)并且编译时间不大。
我的问题是两次
a)在保持实施和原型分离方面,我可能错过了哪些好处?
b)如果没有,是否有任何可以将cpp文件合并回头文件的免费工具或ide? p>
答案 0 :(得分:9)
不要这样做。对于大多数简单的类,您希望公开该类以供其他地方使用,您应始终*在.h
头文件中声明该类,并在.cpp
中定义(代码)文件。
然后将.h
文件包含在要使用该类的任何位置(即实例化它)。但是,链接器负责在单独编译.cpp
之后“链接”代码。
我的问题是,“你还能怎么做?”我看到许多n00bs犯的一个错误是#include "foo.c
。然后会发生什么,你不仅失去了独立的编译,而且在链接时遇到了问题,因为同一个类有多个定义。请记住,当你#include
一个文件时,它实际上就是你所说的那个文件的正文。
[*]这条规则当然有例外:
一个例外是模板类。这些必须完整地放在头文件中。原因是因为在使用类型参数实例化类之前不会生成实际代码。然后,编译器基本上“填充”具有所需类型的类的主体。由于该类型在此之前未知,因此不能独立编译并在以后进行链接。