コードをコンパイルするときのエラーは次のとおりです。ここでコードを共有できないことをお詫び申し上げます。参考までに、私は外部ライブラリを使用していないので、これらのリンカーエラーについてはよくわかりません。DeviceManager
それらは私がクラスで宣言した仮想関数から来ているようです。それぞれの実装は、他の2つのクラスにあります。
誰かがこれらのエラーで私を助けることができますか?
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