【发布时间】:2012-05-22 01:58:52
【问题描述】:
以下是我编译代码时的错误。很抱歉我不能在这里分享我的代码。仅供参考,我不使用任何外部库,所以我真的不确定这些链接器错误。它们似乎来自我在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(可能的解决方案):
问题似乎是因为在DeviceManagerclass 中声明的虚函数不是纯虚函数,并且在DeviceManager 类的.cpp 中没有定义。
如果DeviceManagerclass 没有任何非虚函数,则将虚函数设为纯函数将是解决方案。像 virtual void testFunction(); 这样的东西并不纯粹,所以将其更改为 virtual void testFunction()=0; 是解决方案。为此,在继承DeviceManager 类的其他类中实现此虚函数的定义就足够了。在这种情况下,DeviceManagerclass 变为抽象,因此无法实例化。
但在我的例子中,DeviceManagerclass 也有一些非虚函数,也需要实例化才能调用非虚函数。因此,解决方案是在继承DeviceManager类的其他类中声明和定义之外,在DeviceManager类的.cpp中实现虚函数的定义。
【问题讨论】:
标签: visual-c++ virtual unresolved-external