C++ C++;单独头文件中的结构原型

C++ C++;单独头文件中的结构原型,c++,c,struct,makefile,C++,C,Struct,Makefile,我很难理解。它说在一个单独的.h文件中定义一个struct是一个很好的实践,这样它就可以在其他文件中使用。我认为这很好,它解决了我目前的困境,但是我对编译和生成文件有一个问题。目前我只熟悉与.cpp文件关联的头文件 有人能解释一下当我有一个.h和no.cpp时,实现会是什么样子吗?我也需要一个实现文件吗?另外,如何链接makefile中的头文件?目前我只知道如何将.cpp&头编译成.o文件并链接它们 谢谢,很抱歉让我们回到C++幼儿园。这是一个新的启示,似乎是一个很好的启示。对于每个header

我很难理解。它说在一个单独的.h文件中定义一个struct是一个很好的实践,这样它就可以在其他文件中使用。我认为这很好,它解决了我目前的困境,但是我对编译和生成文件有一个问题。目前我只熟悉与.cpp文件关联的头文件

有人能解释一下当我有一个.h和no.cpp时,实现会是什么样子吗?我也需要一个实现文件吗?另外,如何链接makefile中的头文件?目前我只知道如何将.cpp&头编译成.o文件并链接它们


谢谢,很抱歉让我们回到C++幼儿园。这是一个新的启示,似乎是一个很好的启示。

对于每个header.h文件,您不需要匹配的源文件(.c或.cpp)

有头文件而没有相应的源文件是很好的

当包含某些头文件时,可以将其视为一种“复制和粘贴”操作:预处理器复制头文件的内容,并将其粘贴到包含点。
(嗯,这里有一些细节要考虑,例如存在一个< >代码>语法>曾经的指令或一些<代码>αIFIFF <代码>包含保护可以阻止给定项目中同一头文件的多个包含。
<> > C和C++编译器将处理整个编译单元,即包含所有包含的头的当前源文件。

关键概念是在标头中定义结构/类,以便可以在多个<代码> .CPP < /C>文件中使用它。每当您需要在

foo.h
中定义的
struct foo
时,您
#包括“foo.h”
。您不需要直接编译头文件,它将由使用它的源文件拉入。因此,在正常情况下,
.h
不需要make目标


如果从未使用头文件中的定义,则不会将其拉入,仅此而已。

从另一个角度来看,头文件和编译单元之间的区别也很重要:编译单元(.cpp+.h)被编译为正在装运的机器代码,即程序或库。为了使用库的API,您需要(明文)头文件,当然还需要库本身。但是,包含在.cpp文件中的源代码不需要提供。感谢您的快速反馈,我每天都从你们那里学到一些新东西!