Visual c++ 错误LNK:虚拟函数导致无法解析的外部符号

Visual c++ 错误LNK:虚拟函数导致无法解析的外部符号,visual-c++,virtual,unresolved-external,Visual C++,Virtual,Unresolved External,以下是编译代码时的错误。很抱歉,我不能在这里共享我的代码。仅供参考,我不使用任何外部libs,所以我真的不确定这些链接器错误。它们似乎来自我在DeviceManager类中声明的虚拟函数。它们各自的实现在另外两个类中 有人能帮我解决这些错误吗 1>device_manager.obj : error LNK2028: unresolved token (0A000397) "public: virtual void __clrcall DeviceManager::loadConfig(c

以下是编译代码时的错误。很抱歉,我不能在这里共享我的代码。仅供参考,我不使用任何外部libs,所以我真的不确定这些链接器错误。它们似乎来自我在DeviceManager类中声明的虚拟函数。它们各自的实现在另外两个类中

有人能帮我解决这些错误吗

1>device_manager.obj : error LNK2028: unresolved token (0A000397) "public: virtual void __clrcall DeviceManager::loadConfig(class System::IO::StreamReader ^)" (?DeviceManager@DeviceManager@@$$FUAMXP$AAVStreamReader@IO@System@@@Z) referenced in function "void __clrcall `dynamic initializer for 'const DeviceManager::`vftable'''(void)" (???__E??_7DeviceManager@@6B@@@YMXXZ@?A0xc2524ebc@@$$FYMXXZ)
1>device_manager.obj : error LNK2019: unresolved external symbol "public: virtual void __clrcall DeviceManager::loadConfig(class System::IO::StreamReader ^)" (?loadConfig@DeviceManager@@$$FUAMXP$AAVStreamReader@IO@System@@@Z) referenced in function "void __clrcall `dynamic initializer for 'const DeviceManager::`vftable'''(void)" (???__E??_7DeviceManager@@6B@@@YMXXZ@?A0xc2524ebc@@$$FYMXXZ)
1>device_manager.obj : error LNK2001: unresolved external symbol "public: virtual class Device * __thiscall DeviceManager::createDevice(void)" (?createDevice@DeviceManager@@UAEPAVDevice@@XZ)
1>device_manager.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall DeviceManager::initializeDevices(void)" (?initializeDevices@DeviceManager@@UAEXXZ)
1>C:\Users\CH\Documents\Visual Studio 2010\Projects\Test Devices\Test Devices\Debug\Test Devices.exe : fatal error LNK1120: 4 unresolved externals
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:01.50
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
更新1可能的解决方案:

问题似乎是因为DeviceManager类中声明的虚函数不是纯虚函数,并且在DeviceManager类的.cpp中没有定义

如果DeviceManager类没有任何非虚拟函数,那么将虚拟函数变为纯函数将是解决方案。类似于这个虚拟的void测试函数;不是纯的,因此将其更改为虚拟void testFunction=0;这就是解决办法。为此,在继承DeviceManager类的其他类中实现此虚拟函数的定义就足够了。在这种情况下,DeviceManager类变得抽象,因此无法实例化


但是在我的例子中,DeviceManager类也有一些非虚拟函数,并且还需要实例化以调用非虚拟函数。因此,解决方案是除了继承DeviceManager类的其他类中的声明和定义之外,在DeviceManager类的.cpp中实现虚拟函数的定义。

您是否尝试过完全清理和重建

您的类是否至少有一个非虚拟成员函数? 我几年前就看到过这个问题


除此之外,我建议将函数原型和完整参数列表复制到word pad或其他地方,并更改字体,使其看起来不那么熟悉,以至于你的眼睛会扫过它,然后比较每个函数的每个调用,以确保它们匹配更可能导致复杂问题,但值得检查。

是的,DeviceManager类有3个非虚拟函数。还有,是的,我已经清理并重建了它,没有任何改变。是的,所有这些和代码中的一切似乎都很好,还没有进展!史蒂夫,我想我现在有了一个解决方案,请看看我的更新,并评论你的想法。谢谢你的帮助:听起来不错,做得很好-我想这可能是我几年前看到的关于我脑海中出现的一个非虚拟会员的问题,对不起,我没有更具体地记住它,否则我可以帮你省去一些挠头!!!