我正在尝试编译类似于以下代码的代码,它是我尝试使用 MS Visual Compiler 编译的库 dll 的一部分:
#include <iostream>
#include <map>
#include <string>
#include <memory>
struct B {
};
template <typename T>
class TemplateClass {
public:
void print() {
std::cout << "Hello, world!\n";
}
private:
std::map<std::string, std::unique_ptr<T>> m_map;
};
template class __declspec(dllexport) TemplateClass<B>;
int main()
{
TemplateClass<B> test;
test.print();
return 0;
}
编译失败并出现以下错误:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\xmemory0(655): error C2280: 'std::pair<const _Kty,_Ty>::pair(const std::pair<const _Kty,_Ty> &)': attempting to reference a deleted function
with
[
_Kty=std::string,
_Ty=std::unique_ptr<B,std::default_delete<B>>
]
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\utility(96): note: see declaration of 'std::pair<const _Kty,_Ty>::pair'
with
[
_Kty=std::string,
_Ty=std::unique_ptr<B,std::default_delete<B>>
]
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\xmemory0(773): note: see reference to function template instantiation 'void std::allocator<_Other>::construct<_Objty,_Ty&>(_Objty *,_Ty &)' being compiled
with
[
_Other=std::_Tree_node<std::pair<const std::string,std::unique_ptr<B,std::default_delete<B>>>,void *>,
_Objty=std::pair<const std::string,std::unique_ptr<B,std::default_delete<B>>>,
_Ty=std::pair<const std::string,std::unique_ptr<B,std::default_delete<B>>>
]
...
我无法找出这个简单的代码有什么问题。如果我删除__declspec(dllexport)
,它会完美地编译和执行。
预先感谢您的帮助。