导出模板化类时未解析的外部
Unresolved external when exporting a templated class
本文关键字:外部 更新时间:2023-10-16
我在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();
};
当类是模板时,似乎有问题。如果是这样,如何导出模板类?
有人可以帮助我解决这个问题吗?谢谢!
正如怀疑的那样,我没有正确导出模板类。这是我所做的:
MainLib.h
#include sp.h
#include ImagePtr.h
#ifdef VLIB_EXPORTS
#define VLIB_API __declspec(dllexport)
#define EXPIMP_TEMPLATE
#else
#define VLIB_API __declspec(dllimport)
#define EXPIMP_TEMPLATE extern
#endif
EXPIMP_TEMPLATE template class VLIB_API SP<CVBlob>;
typedef SP<CVBlob> CVBlobPtr;
class VLIB_API CVLib
{
public:
virtual CVBlobPtr CreateBlob() = 0;
virtual CVImagePtr CreateImg() = 0;
};
您可以在此处找到更多信息:http://support.microsoft.com/kb/168958
您需要
用extern "C"
标记类,以便在类的实现和标头上具有非损坏的名称。
看看这个关于原因的规范答案。
相关文章:
- 在函数内部的声明中初始化数组,并在外部使用它
- 使外部项目可用于find_package CMake
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- C++:来自外部文件的Trivia
- 从函数角度看ID到文件路径的内部与外部映射
- C++:将外部库链接到dll库
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 节俭并发:未解决的外部问题
- 如何在c++中从git建立外部库
- 未解析的外部符号_MsiLocateComponentW@12.
- 如何使用对C函数和类对象的外部调用来处理C++头文件
- 具有外部"c"和程序集的未定义函数
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 在C++中使用 gRPC 时未解析的外部符号
- 在类函数中初始化外部作用域变量
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 调用外部函数,无法指定类型 C++/MVS
- 同时具有"外部"和"内联"说明符的变量
- LibPrivoxy: 未解析的外部符号 __declspec(dllimport) int __stdcall Sta