在库中,我具有以下模板类定义(这是一个无用的模板类,它只是使代码简短的一个示例)
Lib.h
#ifdef PTRTESTLIB_EXPORTS
#define PTRTESTLIB_API __declspec(dllexport)
#else
#define PTRTESTLIB_API __declspec(dllimport)
#endif
template<class T> class PTRTESTLIB_API TemplateType
{
public:
TemplateType() {}
TemplateType(T e) : elem(e) {}
private:
T elem;
};
在另一个项目中,我想使用此模板类。因此,我导入Mylibrary.lib并包含必要的头文件。
AnotherProject \ Tester.cpp
#include <TestLib/Lib.h>
int main()
{
TemplateType<double> d;
}
编译器给我以下错误
1>------ Build started: Project: TesterClass, Configuration: Debug Win32 ------
1>TesterClass.cpp
1>TesterClass.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall TemplateType<double>::TemplateType<double>(void)" (__imp_??0?$TemplateType@N@@QAE@XZ) referenced in function "void __cdecl testPtrTestLib(void)" (?testPtrTestLib@@YAXXZ)
1>E:\Metrostaff_Software\ArcoCAD_Inspection\Sources\TesterClass\Debug\TesterClass.exe : fatal error LNK1120: 1 unresolved externals
1>Done building project "TesterClass.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
使用模板类的唯一方法是在 Lib.h
template class TemplateType<double>;
或
use this class template at least one time in the code of the library.
是否可以在不知道将是哪种专业的情况下在库中编写类模板?
谢谢
答案 0 :(得分:0)
尝试消除模板类中的 declspec 。应该可以。