未解析的外部符号(LNK2019)

时间:2012-11-26 07:45:47

标签: c++ visual-studio-2008 linker

我有以下文件:
interface.h

class Interface
{
  ...
};

Interface* CreateInterface();

impl.h

#include "interface.h"

class Impl: public Interface
{
  ...
};

impl.cpp

#include "impl.h"

SomeInterface* CreateInterface()
{
  return new Impl;
}
...

的main.cpp

#include "Interface.h"
int main()
{
  CreateInterface();
}

最初我的项目看起来很受欢迎this。但是出于测试目的,所有文件现在都在同一个项目中 编译时,我收到LNK2019错误,说CreateInterface未解析。我正在使用VS 2008我不知道出了什么问题。

2 个答案:

答案 0 :(得分:2)

您是否打算拥有多个CreateInterface()声明?

<强> Interface.h

Interface* CreateInterface();

<强> Impl.cpp

SomeInterface* CreateInterface()

其中只有一个(后者)似乎实际上已实施。你有一个名称歧义,看起来编译器选择了错误的一个(很可能是因为它不知道其他甚至存在)。

使用相同的参数列表在impl.cpp中定义CreateInterface(),并在Interface.h中返回类型作为原型。我通常不会宽恕这种野兽般的设计,但看起来这就是你想要的。

<强> Impl.cpp

Interface* CreateInterface() // note the return type
{
    return new Impl;
}

老实说我不敢相信这甚至编译,考虑到你们两者之间的差别(Interface.h中的声明和Impl.cpp中的实现)是一个返回类型的区别,编译器应该全都呕吐那么,你可能仍然没有向我们展示。

答案 1 :(得分:0)

链接器告诉你它知道CreateInterface存在并且是一个函数,但它找不到实际的函数本身。所以我怀疑你没有在你的项目中包含impl.cpp,而且它没有被编译。