我是一名 C++ 学习者,我遇到了将代码分成多个文件以加快大型项目的编译过程的概念。
然而,这本书没有告诉我什么,我试图在其他书籍和网络上找到它,但没有运气的是链接器(在编译期间)如何知道要包含哪些文件。
当我创建新文件时,我使用 #include "newfile.h"
将其 header 连接到主文件,但是在这个 header 中我没有写在哪里可以找到函数的定义。
所以我如何想象这个过程是它从主文件开始,并在那里找到与其他文件的“连接”。问题是它如何找到那些据我所知不需要与其头文件命名相同的 .cpp 文件。
示例:
主文件:
#include <iostream>
#include "krneki_H.h"
using namespace std;
int main()
{
krneki1();
krneki2();
krneki3();
}
和头文件:
void krneki1();
void krneki2();
void krneki3();
和新的 .cpp 文件:
#include <iostream>
#include "krneki_H.h"
using namespace std;
void krneki1() {
cout<<"Krneki1"<<endl;}
void krneki2() {
cout<<"Krneki2"<<endl;}
void krneki3() {
cout<<"Krneki3"<<endl;}
请注意,没有使用第二个 cpp 文件的指示。它只知道使用它。它会搜索 map 中的所有 .cpp 文件吗?
谢谢你的答案。
最佳答案
不,它不只是知道使用它。在您的示例中,如果您使用 main.cpp
进行编译并且没有那个新的 cpp 文件,您将收到“ undefined reference ”错误。
发生的情况是您正在使用一个自动编译所有 cpp 文件的花哨的 IDE。它默认将它们全部包含在您的 makefile 中。
我建议您尝试从头开始设计一个 makefile,并亲眼看看如果您不包含具有函数实现的 cpp 文件,您将如何获得“ undefined reference ”错误。