在我的应用程序中,我有一个dll,它暴露了一个带有两个向量的函数:
static int myFunc( vector<double> vec1, vector<double> &vec2 );
当我将此声明更改为
时static int myFunc( vector<double> &vec1, vector<double> &vec2 );
我收到链接器错误说:
error LNK2019: unresolved external symbol "__declspec(dllimport) public: static int __cdecl myFunctions::myFunc(class std::vector<double,class std::allocator<double> > &,class std::vector<double,class std::allocator<double> > &)" (__imp_?myFunc@myFunctions@@SAHAAV?$vector@NV?$allocator@N@std@@@std@@0@Z) referenced in function "public: void __thiscall MainWindow::modelMeanCurve(void)" (?modelMeanCurve@MainWindow@@QAEXXZ)
为什么会出现这种情况?如何解决此错误,以便我也可以将引用传递给第一个参数?
谢谢,勒凯什。
答案 0 :(得分:0)
嗯,仅仅更改声明是不够的。您还必须更改该函数的定义并重新编译DLL。
如果您只是更改了声明并保持定义不变,那么您实际上为一个实际上不存在的函数创建了一个新声明。 DLL仍包含具有原始参数集的原始函数,现在与您的新声明完全无关。这是链接器通过上述错误告诉您的内容。
答案 1 :(得分:0)
谢谢@Michael Burr,我指的是.lib文件的陈旧副本。我用新版本替换了它,一切都很好。