Каждый из этих классов находится в отдельных модулях dll:
class Base
{
public:
virtual void foo();
void bar();
};
class Derived : public Base
{
public:
// override Base::foo()
void foo();
};
In 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()" ...
Единственное решение, которое я нашел, это переопределить Base :: bar () в Derived или сделать так, чтобы Other.dll также связывался с Base.lib. Оба решения нежелательны, поскольку они добавляют требования клиента при изменении сервера.
Есть какие-нибудь идеи по поводу лучшего способа доступа / определения виртуальных методов базового класса в этом сценарии?