我打开了一个旧工作区,它是一个库及其测试工具。它过去可以正常工作,但现在不能,旧版本的代码也不能正常工作,出现相同的错误。我试过重新创建项目,这也会导致同样的错误。项目设置中似乎没有任何问题,并且生成的代码在主应用程序中有效。
我已经删除了大部分文件并将其降至最低限度以生成错误。不幸的是,我无法发布该项目,因为它用于生产代码。
我得到的 LNK2001 链接器错误通常意味着我已经离开了一个库或忘记实现一个虚函数。然而,这是标准模板库的一部分 - 并且是一个标题。
在 IOCompletionPort.obj 中列为有问题的代码实际上并没有std::string
直接使用,而是调用了一个类:Comms::Exception
接受 astd::string
和GetLastError
or的值WSAGetLastError
。
错误()中提到的函数GetMessage
已实现,但它是一个虚函数,因此其他类可以在需要时覆盖它。但是,编译器似乎已将其作为 Ansi 版本,但我在设置中找不到任何可以控制它的选项。我怀疑这可能是问题所在,但由于图书馆的选择方式很少,我无法确定。但是,这两个项目都在编译器选项中指定 _MBCS。
--------------------配置:TestComms - Win32 调试--------------------链接... Comms.lib(IOCompletionPort.obj):错误 LNK2001:无法解析的外部符号“公共:虚拟类 std::basic_string,class std::allocator > __thiscall Comms::Exception::GetMessageA(void)const”(?GetMessageA@ Exception@ Comms@@UBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) Debug/TestComms.exe : 致命错误 LNK1120: 1 unresolved externals 执行错误链接.exe。
TestComms.exe - 2 个错误,0 个警告
有什么建议么?我早上的大部分时间都为此而迷失,也不想下午的大部分时间都迷失。