1

コードをコンパイルするときのエラーは次のとおりです。ここでコードを共有できないことをお詫び申し上げます。参考までに、私は外部ライブラリを使用していないので、これらのリンカーエラーについてはよくわかりません。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、クラスので仮想関数の定義を実装することです。DeviceManagerDeviceManager

4

1 に答える 1

0

完全なクリーンアップと再構築を試みましたか?

クラスに少なくとも 1 つの非仮想メンバー関数がありますか?
私は数年前にその問題を見てきました。

それ以外では、関数プロトタイプと完全なパラメーター リストをワード パッドなどにコピーし、フォントを変更して (見慣れたように見えて目をスキャンしないようにするため)、すべての関数へのすべての呼び出しを比較して、一致します (コンパイルの問題を引き起こす可能性が高くなりますが、チェックする価値があります)。

于 2012-05-14T15:01:21.507 に答える