我有以下文件:
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我不知道出了什么问题。
答案 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,而且它没有被编译。