C ++库中的模板类定义

时间:2019-12-16 16:39:07

标签: c++ visual-studio templates

在库中,我具有以下模板类定义(这是一个无用的模板类,它只是使代码简短的一个示例)

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.

是否可以在不知道将是哪种专业的情况下在库中编写类模板?

谢谢

1 个答案:

答案 0 :(得分:0)

尝试消除模板类中的 declspec 。应该可以。