以下是我编译代码时的错误。很抱歉我不能在这里分享我的代码。仅供参考,我不使用任何外部库,所以我真的不确定这些链接器错误。它们似乎来自我在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
类中声明的虚函数不是纯虚函数并且在.cpp
类中没有定义DeviceManager
。
如果DeviceManager
该类没有任何非虚函数,则将虚函数设为纯函数将是解决方案。像这样virtual void testFunction();
的东西并不纯粹,因此将其更改virtual void testFunction()=0;
为解决方案。为此,在继承DeviceManager
该类的其他类中实现此虚函数的定义就足够了。在这种情况下,DeviceManager
类变得抽象,因此无法实例化。
但就我而言,DeviceManager
该类也有一些非虚拟函数,并且还需要实例化才能调用非虚拟函数。因此,解决方案是在继承该类的其他类中的声明和定义之外,实现该类.cpp
中虚函数的定义。DeviceManager
DeviceManager