我正在尝试用C ++编写一个DLL,我可以在其他项目中使用它。 我的一个课程看起来像这样
MyClass.h:
#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif
template <typename T, typename C>
class MYDLL_API MyClass
{
private:
static C *variable;
//...
};
MyClass.cpp:
#include "stdafx.h"
#include "MyClass.h"
template <typename T, typename C>
C *MyClass<T, C>::variable= NULL;
当我编译它时,我得到“错误LNK2001:未解析的外部符号......”这个变量。 在我尝试制作DLL之前,这段代码已经完美运行了......
请帮我解决这个问题。
答案 0 :(得分:1)
您不能将模板类放入DLL中,因为它根本不会那样工作:当您为模板指定实际类型时,编译器会发出类的实际代码(这就是STL作为源代码提供的原因)。
只需创建一个.h文件并在那里添加所有实现。在其他项目中,包括它:
// MyClass.h
template <typename T, typename C>
class MyClass
{
private:
static C *variable;
//...
};
template <typename T, typename C>
C *MyClass<T, C>::variable= NULL;
// OtherProject.cpp
#include "MyClass.h"
// ...
MyClass<int, char> instance; //...
如果您确定知道其他项目将使用哪种类型,您可以使用显式实例化,只需添加如下内容:
// explicitly instantiate class
template class MyClass<int, char>;
进入MyClass.cpp