C++ 我应该总是将文件拆分为声明(.h)和定义(.cpp)吗

C++ 我应该总是将文件拆分为声明(.h)和定义(.cpp)吗,c++,split,C++,Split,为了使一些代码更易于阅读,我将其拆分为多个文件。其中一个文件只包含2种初始化方法。是否值得为中的这些方法创建一个带有声明的.h(包括该声明),或者我应该直接包含.cpp吗?对于两个方法,是否值得遵守该标准?您不应该包含cpp文件,无论定义有多少:其他几个cpp文件中包含的每个定义都会产生重复符号,从而导致链接错误 如果您构建了一个在多个翻译单元中使用的类(这是cpp文件的别致名称),那么您应该为它构建一个头。模板没有cpp文件-只需要一个标题 尽管通常的做法是为每个类创建一个cpp/头对,但在一

为了使一些代码更易于阅读,我将其拆分为多个文件。其中一个文件只包含2种初始化方法。是否值得为中的这些方法创建一个带有声明的.h(包括该声明),或者我应该直接包含.cpp吗?对于两个方法,是否值得遵守该标准?

您不应该包含cpp文件,无论定义有多少:其他几个cpp文件中包含的每个定义都会产生重复符号,从而导致链接错误

如果您构建了一个在多个翻译单元中使用的类(这是cpp文件的别致名称),那么您应该为它构建一个头。模板没有cpp文件-只需要一个标题


尽管通常的做法是为每个类创建一个cpp/头对,但在一个翻译单元中包含多个相关类并将所有声明放在一个头中是可以的。

就像前面所说的,您不包括.cpp文件。如果项目需要您的代码,那么必须使用标题。但是,您也可以始终使用extern

您包含的
.cpp
文件是一个名称错误的
.h
文件

.cpp
.h
是对程序员有意义的扩展(以及工具链中的临时工具)。如果你开始使用
#include
ing
.cpp
文件,即使你说服你的工具链如何处理它,你也会让其他程序员(包括你自己)感到困惑


有时,只创建一组工具或函数的头文件是可以接受的。调用该文件
.cpp
不正确。

从不包括.cpp文件。从未。从来没有。@H2CO3足够公平。为什么不呢,我已经在一些例子中见过了?(不是说这是对的,只是想解释一下为什么不是。)
ld:1体系结构x86的重复符号64
.h
.cpp
之间分割文件没有硬性规定。我通常使用模板并创建仅标题库,因此我将所有内容都保存在
.h
文件中。@handuel您无法使用预处理器指令解决链接时间错误,因为翻译单元是独立处理的。编译器不会阻止您在标题中添加多个相关类,但请小心!我有一个项目变得非常庞大,最终发现很难定位与数学库相关的课程。即使它们都是相关的,但如果我将它们分开并保留1:1的标题/翻译单元范例,我会花更少的时间搜索内容。@DJPeterson我同意,在标题中粘贴多个类应该是例外,而不是规则。在我唯一考虑的时候,是当类为紧组合项的一个“簇”时,例如一个类和它的<代码>朋友< /代码>比较器。这种情况在C++11中应该不太常见。