我正在使用Visual Studio 2008構建的C++項目。 我正在定義(在生成dll的項目中)模板類和派生的非模板類:類擴展模板類的C++符號導出
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)" ([email protected][email protected]@@@@QAEHXZ)
如果其他地方在我的DLL的代碼,我正在使用d.base()函數,它運行良好,鏈接器錯誤在「用戶」項目中消失。如果我刪除了模板部分(在我的例子中它不是非常有用,但是在真實情況下),一切都很好。
它看起來像函數沒有被編譯,如果它沒有被使用,或者等價的東西。任何想法 ?
在此先感謝。
是的,這很有效!謝謝。 DLL_EXPORT是不需要的,你甚至可以說'模板Base'(沒有struct關鍵字) –
Xavier
2011-06-17 16:06:56