これらの各クラスは、個別のdllモジュールにあります。
class Base
{
public:
virtual void foo();
void bar();
};
class Derived : public Base
{
public:
// override Base::foo()
void foo();
};
Other.cppの場合:
#include "Derived.h"
Base.libとの派生リンクを含むモジュール(エクスポート/インポートディレクティブは表示されていません)。Other.cppを含むモジュールはDerived.libとリンクしていますが、Base.libはリンクしていません。この時点まで、すべてが正常に機能します。
ただし、Base :: bar()を仮想に変更し、Derivedに変更を加えない場合、リンカーはOther.dllをリンクするときに文句を言います。
Other.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Base::bar()" ...
私が見つけた唯一の解決策は、DerivedのBase :: bar()をオーバーライドするか、Other.dllもBase.libとリンクすることです。サーバーが変更されたときにクライアント要件が追加されるため、どちらのソリューションも望ましくありません。
このシナリオで基本クラスの仮想メソッドにアクセス/定義するためのより良い方法に関するアイデアはありますか?