什么是未定义引用/未解析外部符号错误以及如何修复
技术背景
在编译和链接C++程序时,未定义引用/未解析外部符号错误是常见的问题。当编译器将多个源文件编译成目标文件后,链接器负责将这些目标文件和库文件组合成一个可执行程序或库。如果链接器在搜索所有链接的目标文件和库时,找不到某个符号(如函数、变量等)的定义,就会抛出未定义引用错误。
实现步骤
编译和链接过程
- 编译阶段:编译器将每个源文件(
.cpp或.c)编译成目标文件(.o或.obj)。在这个阶段,编译器只处理单个源文件,对于未定义的符号,它会假设这些符号在其他地方定义。 - 链接阶段:链接器将所有目标文件和库文件组合在一起,解决符号引用。如果链接器找不到某个符号的定义,就会报错。
常见错误示例
// a.cpp
int get() {
return 0; }
// b.cpp
int get();
int x = get();
在编译 b.cpp 时,编译器假设 get() 函数在其他地方定义。如果 a.cpp 没有定义 get() 函数,链接器会报错,提示 “未定义引用” 或 “未解析外部符号”。
核心代码
类成员相关错误
// 纯虚析构函数需要实现
struct X
{
virtual ~X() = 0;</

最低0.47元/天 解锁文章
2051

被折叠的 条评论
为什么被折叠?



