因为我已经制作了.cpp文件,然后将它们传输到.h文件,所以我能找到的唯一区别是您不能#include .cpp文件。我缺少什么区别吗?
因为我已经制作了.cpp文件,然后将它们传输到.h文件,所以我能找到的唯一区别是您不能#include .cpp文件。我缺少什么区别吗?
Answers:
.cpp文件是编译单元:这是将要编译的真实源代码文件(在C ++中)。
.h(头文件)文件实际上是将被复制/粘贴到出现#include precompiler指令的.cpp文件中的文件。将标头代码插入.cpp代码后,即可开始.cpp的编译。
标头(.h
,,.hpp
...)文件包含
class X { ... };
)inline int get_cpus() { ... }
)void help();
)extern int debug_enabled;
)源文件(.c
,.cpp
,.cxx
)包含
void help() { ... }
或void X::f() { ... }
)int debug_enabled = 1;
)但是,实际上不需要标头以.h
后缀命名和源文件以后缀命名的约定.cpp
。总是可以告诉一个好的编译器如何处理某个文件,而不管其文件名后缀如何(-x <file-type>
对于gcc。Like -x c++
)。
源文件将包含在整个程序中只能出现一次的定义。因此,如果在某处包含一个源文件,然后将该文件的编译结果与该源文件本身的编译结果链接在一起,则当然会出现链接器错误,因为这些定义现在出现两次:包含源文件,然后在包含它的文件中。这就是为什么您在包含.cpp
文件时遇到问题。
.h文件或头文件用于在类声明中列出可公开访问的实例变量和方法。.cpp文件或实现文件用于实际实现那些方法并使用那些实例变量。
它们分开的原因是因为.h文件没有被编译成二进制代码,而.cpp文件却被编译成二进制代码。以图书馆为例。假设您是作者,并且不希望它是开源的。因此,您可以将编译后的二进制库和头文件分发给客户。这样一来,他们可以轻松查看有关可以使用的库类的所有信息,而无需查看如何实现这些方法。它们更适合使用您的代码而不是编译器的人们。如前所述:这是惯例。