核心内容
视频的核心内容是解释 C++ 程序从源代码到可执行文件的过程中,“链接”这一步骤的作用以及常见的链接错误和解决方法。
- 什么是链接? [00:04] 链接是在编译之后的一个步骤,它的主要任务是找到程序中所有被称为“符号”的东西(比如函数或变量)的位置,并将它们连接起来,最终生成一个可执行文件 [00:21]。即使是只有一个文件的简单程序,也需要链接器来找到程序的入口点(
main 函数),这样程序才能开始运行 [00:52]。 
- 编译和链接的区别 [01:37]
- 编译是将源代码转换成机器码,主要关注语法是否正确。编译错误通常以 “C” 开头 [02:31]。
 
- 链接是将编译后生成的各个部分组合起来。链接错误通常以 “LNK” 开头 [02:50]。
 
 
常见的链接错误及解决方法
- 未解析的外部符号 (Unresolved External Symbol) [05:47]
- 原因:当代码中调用了一个函数,但链接器找不到这个函数的具体实现时,就会报这个错。这可能是因为函数名写错了,或者忘记将实现该函数的 
.cpp 文件加入到项目中 [05:53]。 
- 注意:函数的签名(返回类型、函数名和参数)必须完全匹配,否则链接器也会认为它们是不同的函数 [08:26]。
 
 
- 符号重复定义 (Duplicate Symbol) [09:45]
- 原因:当同一个函数或变量有多个定义时,链接器就不知道该使用哪一个。一个常见的原因是在头文件(
.h 文件)中直接定义了函数,然后这个头文件又被多个 .cpp 文件包含,导致每个 .cpp 文件都生成了一个函数定义 [12:18]。 
- 解决方法:
- 使用 
static 关键字,将函数的作用域限制在当前文件内 [13:04]。 
- 使用 
inline 关键字,让函数在被调用的地方展开,避免生成重复的符号 [13:30]。 
- 最佳实践:遵循“声明在头文件,定义在源文件”的原则。也就是说,在 
.h 文件中只写函数的声明,在 .cpp 文件中写函数的具体实现 [13:53]。 
 
 
- 缺少入口点 (Missing Entry Point) [03:12]
- 原因:当程序被设置为生成一个可执行文件(
.exe),但链接器找不到 main 函数时,就会发生这个错误。