C++ 中的未定义引用/未解析外部符号错误是什么?


顾名思义,您声明的符号未被您定义。这可能是由于多种情况造成的。让我们看一下其中的三种:

  • 您忘记定义声明的名称。例如,您在一个文件中声明了一个函数并在某处使用了它。但是您没有提供它的定义。代码:

#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年6月23日

1K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告