環境:Visual Studio 9,C++沒有託管擴展。DLL和完全專用的模板類
我有一個第三方庫,它導出了MyClass.h中定義的完全專用模板類MyClass<42>
。它被編譯成一個輔助加載器.lib和一個.dll文件。 .lib文件包含該專業化的編譯代碼和必要的符號。 MyClass.h看起來像這樣:
template<UInt D>
class MyClass {
public:
MyClass() {...};
virtual ~MyClass() {};
}
現在我想使用這個庫。如果將MyClass.h包含在Client.cpp中,然後編譯它,我將在Client.obj文件中獲得這些符號的第二個副本。通過將該專業化的所有成員定義爲「extern」,我可以擺脫這些符號。我的Client.cpp看起來像這樣:
#include <ThirdParty/MyClass.h>
extern template class MyClass<42>;
extern template MyClass<42>::MyClass<42>();
extern template MyClass<42>::~MyClass<42>();
void MyFunction(MyClass<42>& obj) {...}
問題是我不能擺脫這種虛擬析構函數。對於虛擬析構函數,我得到一個幾乎標準的LNK2005錯誤:
ThirdPartyd.lib(ThirdPartyd.dll) : error LNK2005:
"public: virtual __thiscall MyClass<42>::~MyClass<42>(void)"
([email protected][email protected]@@[email protected]) already defined in Client.obj
我該怎麼辦?
+1我很高興你給了這麼小的提示。 – liori 2010-02-18 11:15:05