【发布时间】:2014-10-09 03:03:59
【问题描述】:
所以,我有两个项目,项目 2 构建到一个我有这个类的 dll(标题和 cpp 跟随)
标题
class classWvirts
{
public:
classWvirts(){};
~classWvirts(){};
virtual int testVirtualFunction();
};
cpp
#include "classWvirts.h"
int classWvirts::testVirtualFunction()
{
return 1;
}
在项目 1(构建为 exe)中,我只有一个 .cpp 文件,如下所示:
#include "../testApp2/classWvirts.h"
classWvirts obj1;
int main()
{
obj1.testVirtualFunction();
}
这个设置似乎有它工作的所有要素,我的方法,虽然它被标记为 virtual ,但在它的 cpp 文件中有一个简单的定义。
但是,当我尝试编译它时,我得到一个 LNK2001 链接器错误,看起来像
错误 1 错误 LNK2019:在函数 _main E:\Work\Scratch\US1212_Virt\testApp\testApp 中引用的未解析外部符号“public: virtual int __thiscall classWvirts::testVirtualFunction(void)”(?testVirtualFunction@classWvirts@@UAEHXZ) \Source.obj testApp
有人可以指出我做错了什么吗?我意识到如果我将简单的定义放在头文件中,一切都会正常工作,但如果这不是一个选项怎么办? (这显然是我在大型项目中遇到的问题的简化版本),可能有空间将 cpp 变成 inl 并将其包含在标头中,但我宁愿避免这种情况并保持我的 cpp 和标头区别。
【问题讨论】:
-
与 DLL 导入库链接。还将该类声明为 dll-export。我不记得确切的语法,它是微软特有的。
-
是的,刚刚得出这个结论 :) 感谢您的支持。
标签: c++ linker-errors virtual-functions