什么是 undefined reference/unresolved external symbol 错误?


顾名思义,声明的符号未由你定义。这种情况可能由多个原因引起。让我们看三个原因 −

  • 忘记定义已声明的名称。例如,你在一个文件中声明了一个函数并在其他地方使用了它。但是你没有提供它的定义。代码 −

#include<iostream>
void foo();
int main() {
   foo(); // Declared but not defined
}
  • 你定义了它但没有使用限定名称。假设你创建一个带有方法的类,并定义了该方法,但忘记使用作用域解析将该函数链接到该定义,并在其他地方使用了该函数。例如,

#include<iostream>
class A {
   void foo();
};
void foo() { } // should have used A::foo
int main() {
   A a;
   a.foo(); // Not defined!
}
  • 你未按正确的顺序包含依赖项。链接器尝试按你指定给它的顺序进行链接。因此,如果你在定义之前使用了一个方法,它可能会给出这个问题。

无法创建一个可能导致这个问题的条件的详尽列表。不过,你可以参考这篇文章,里面有一个经过精心整理的可能原因列表 − https://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-how-do-i-fix

更新于: 2020-06-23

1000+ 浏览量

开启你的 职业

完成课程获得认证

开始
广告