C++ C++;编译器(或链接器?)知道如何处理cpp和头类文件?

C++ C++;编译器(或链接器?)知道如何处理cpp和头类文件?,c++,class,compilation,linker,header-files,C++,Class,Compilation,Linker,Header Files,例如,我有一个Foo类。我创建Foo.h,Foo.cpp,然后在main.cpp文件中包含Foo.h。当我编译代码时,机器如何知道将类头文件和类cpp文件关联起来?它是由文件名完成的吗? 我对理解编译和链接的过程非常感兴趣 当我编译代码时,机器如何知道将类头文件和类cpp文件关联起来?它是按文件名做的吗 不,编译器没有这样的自动关联 如果您有一个包含所有函数和类声明的头文件,那么它必须包含在任何使用它的翻译单元(.cpp文件)中。 该步骤(声明合同)由c-预处理器完成,其中每次出现的#inclu

例如,我有一个Foo类。我创建
Foo.h
Foo.cpp
,然后在
main.cpp
文件中包含
Foo.h
。当我编译代码时,机器如何知道将类头文件和类cpp文件关联起来?它是由文件名完成的吗?
我对理解编译和链接的过程非常感兴趣

当我编译代码时,机器如何知道将类头文件和类cpp文件关联起来?它是按文件名做的吗

不,编译器没有这样的自动关联

如果您有一个包含所有函数和类声明的头文件,那么它必须包含在任何使用它的翻译单元(
.cpp
文件)中。
该步骤(声明合同)由c-预处理器完成,其中每次出现的
#include“MyDeclarations.hpp”
在翻译单元中将其替换为完整的
MyDeclarations.hpp


一个简单的例子:

Foo.hpp

 class Foo {
 public:
      Foo(); // Constructor declaration
 };
 #include "Foo.hpp" // <<<< Include declarations

 Foo::Foo() {} // Constructor definition
 #include "Foo.hpp" // <<<< Include declarations

 int main() {
      Foo foo; // <<<<< Use declarations
 }
Foo.cpp

 class Foo {
 public:
      Foo(); // Constructor declaration
 };
 #include "Foo.hpp" // <<<< Include declarations

 Foo::Foo() {} // Constructor definition
 #include "Foo.hpp" // <<<< Include declarations

 int main() {
      Foo foo; // <<<<< Use declarations
 }

这两个文件没有关联。没有必要。编译器和链接器都不会将包含的文件作为文件,因为在此之前,预处理器步骤会将所有内容都放在一起。本网站旨在回答有关代码问题的特定问题。您正在寻找C教程。它根本不关联文件名,它只查找符号名。您的
main.o
将引用在
Foo.h
中声明的符号,这些符号在
Foo.cpp
中定义,因此将在链接时在
Foo.o
中找到。一些好的阅读:我不相信问题太广泛,至少我们应该有一个适当的副本!