0

我正在尝试编译类似于以下代码的代码,它是我尝试使用 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),它会完美地编译和执行。

预先感谢您的帮助。

4

0 回答 0