【发布时间】:2012-11-12 02:57:30
【问题描述】:
我在 dll 中有这个模板智能指针类。
sp.h
---------
#ifdef VLIB_EXPORTS
#define VLIB_API __declspec(dllexport)
#else
#define VLIB_API __declspec(dllimport)
#endif
template < typename T > class VLIB_API SP
{
protected:
T* m_pData;
long* m_pRefCounter;
public:
SP(void);
{
m_pData = NULL;
m_pRefCounter = NULL;
}
...
...
};
ImagePtr.h
---------------
class VLIB_API CVImagePtr
{
....
}
MainLib.h
-------------
#include sp.h
#include ImagePtr.h
typedef SP<CVBlob> CVBlobPtr;
class VLIB_API CVLib
{
public:
virtual CVBlobPtr CreateBlob() = 0;
virtual CVImagePtr CreateImg() = 0;
};
当我尝试在另一个项目(CVMLib)中使用这个类时,编译器会报错: 错误 LNK2019:未解析的外部符号“__declspec(dllimport) public: __thiscall SP::~SP(void)”
但 CVImagePtr 没有问题。
class VMLIB_API CVMLib : public CVLib
{
public:
virtual CVBlobPtr CreateBlob();
virtual CVImagePtr CreateImg();
};
当类是模板时似乎有问题。如果是,如何导出模板类?
有人可以帮我解决这个问题吗?谢谢!
【问题讨论】:
-
SP模板的析构函数是在sp.h中定义的,还是有一个单独的sp.cpp文件并在那里定义? -
析构函数在sp.h中定义
-
实际上,编译器对sp.h中定义的构造函数、析构函数和复制构造函数显示错误。
标签: c++ class templates export