在另一个文件中使用函数时未解析的外部符号

时间:2012-10-06 00:35:00

标签: c++ visual-c++

我有一个头文件定义为:

A.h
class A
{
  void f1();
  void f2();
};

A.cpp
  void A::f1(){}
  void A::f2(){}

现在我正在定义其他应用程序类,我想使用这个类函数,所以我创建了

B.cpp
#include A.h

int main()
{
  A a1;
  a1.f1(); //linker error
}

但是当我调用这个函数时,它会给出像未解析的外部符号这样的链接错误。

2 个答案:

答案 0 :(得分:2)

首先,您应该复制并粘贴完全错误,而不是说它是“喜欢”这样的错误。您可以删除我们回答您问题所需的重要细节。

在这种特殊情况下,解决方案非常简单。您需要在Visual C ++中创建一个项目,并将所有.cpp文件添加到项目中。编译时,链接器应该能够找到所需的一切。

答案 1 :(得分:1)

链接器错误和编译器错误是完全不同的事情。 #included文件中的所有函数声明都告诉编译器如何调用这些函数。这些功能在别处定义。编译器不需要知道定义就知道如何调用它们。将所有这些不同的部分放在一起是链接器的工作。如果您没有向链接器提供所需的部分,则不会获得可执行文件。您将收到链接器错误。

您需要编译A.cpp和B.cpp,然后将它们提供给链接器。仅仅因为编译器和链接器经常被同一工具调用并不意味着它们是同一个东西。他们不是。他们有着截然不同的工作。