因为我已经制作了.cpp文件然后将它们转换成.h文件,我能找到的唯一区别就是你不能#include .cpp文件.我错过了什么区别?
Mac*_*ker 54
C++构建系统(编译器)没有区别,所以它都是约定.
惯例是.h文件是声明,.cpp文件是定义.
这就是为什么.h文件是#included - 我们包括声明.
Kla*_*aim 24
.cpp文件是编译单元:它是将被编译的真实源代码文件(在C++中).
.h(标题)文件是将在#clude预编译器指令出现的.cpp文件中虚拟复制/粘贴的文件.一旦将头文件代码插入.cpp代码中,就可以开始编译.cpp.
Chr*_*isW 12
我知道声明和定义之间的区别.
鉴于:
因此,头文件中的任何定义都应该是内联的或静态的.头文件还包含由多个CPP文件使用的声明.
既不是静态也不是内联的定义都放在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.赞-x c++).
源文件将包含在整个程序中只能出现一次的定义.因此,如果您在某处包含源文件,然后将该文件的编译结果与源文件本身之一链接在一起,那么您当然会遇到链接器错误,因为您现在会将这些定义出现两次:一次进入包含源文件,然后在包含它的文件中.这就是你在包含.cpp文件时遇到问题的原因.
.h文件或头文件用于列出类声明中可公开访问的实例变量和方法..cpp文件或实现文件用于实际实现这些方法并使用这些实例变量.
它们是分开的原因是因为.hpp文件不是编译成二进制代码的.h文件.以图书馆为例.假设您是作者,并且您不希望它是开源的.因此,您将已编译的二进制库和头文件分发给您的客户.这使他们可以轻松地查看有关您的库可以使用的类的所有信息,而无法看到您如何实现这些方法.它们更适合使用代码而不是编译器的人.如前所述:这是惯例.