Я работаю над проектом C ++, созданным с помощью Visual Studio 2008.
Я определяю (в проекте, создающем dll) класс шаблона и производный, не шаблонный, один:
template <class T>
struct DLL_EXPORT Base {
int base() { return 1; }
};
struct DLL_EXPORT Deriv: public Base<Deriv> {
int deriv() { return 1; }
};
DLL_EXPORT
это обычный материал:
#ifdef COMPILING_MY_DLL
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif
Теперь, когда я пытаюсь использовать мой класс Deriv
в другом проекте, проблема начинается. Если я использую только функцию из Deriv
, она хорошо работает:
Deriv d;
d.deriv();
Но если я пытаюсь вызвать d.base()
, я получаю следующую ошибку компоновщика:
error LNK2019: unresolved external symbol "__declspec(dllimport) public: int __thiscall Base<struct Deriv>::base(void)" (__imp_?base@?$Base@UDeriv@@@@QAEHXZ)
Если в другом месте моего dll-кода я использую функцию d.base (), она работает хорошо, и ошибка компоновщика исчезает в проекте пользователя. И если я удалю часть шаблона (это не очень полезно в моем примере, но в реальной ситуации это так), все в порядке.
Похоже, что функция не компилируется, если она не используется, или что-то эквивалентное. Есть идеи?
Заранее спасибо.