0

我有以下文件:
interface.h

class Interface
{
  ...
};

Interface* CreateInterface();

实现.h

#include "interface.h"

class Impl: public Interface
{
  ...
};

实现.cpp

#include "impl.h"

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

主文件

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

最初我的项目看起来像这样。但是出于测试目的,所有文件现在都在同一个项目中。
编译时出现 LNK2019 错误,提示 CreateInterface 未解决。我正在使用 VS 2008 我不知道出了什么问题。

4

2 回答 2

2

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

接口.h

Interface* CreateInterface();

实现.cpp

SomeInterface* CreateInterface()

其中只有一个(后者)似乎实际实施。您的名称有歧义,并且编译器似乎选择了错误的名称(很可能是因为它甚至不知道另一个名称是否存在)。

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

实现.cpp

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

老实说,我简直不敢相信这甚至可以编译,考虑到您只是两者之间的区别(Interface.h 中的声明和 Impl.cpp 中的实现)是返回类型的差异,编译器应该对此感到厌烦,所以您可能还没有向我们展示某些内容。

于 2012-11-26T08:20:39.907 回答
0

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

于 2012-11-26T07:48:44.467 回答