我有一个Load-Method,它构建了我的unique_ptr(稍后会多于一个)以及将这些unique_ptr添加到我的无序地图的方法。但是,代码不编译,我想它是与作用域...编译时尝试将unique_ptr放入地图中的错误
下面是代码:
#include <unordered_map>
#include <memory>
class MyClass
{
public:
std::string Name;
};
using Map = std::unordered_map<std::string,std::unique_ptr<MyClass>>;
class MyContainer
{
private:
Map myMap;
void AddItem(std::unique_ptr<MyClass> item)
{
myMap.emplace("test", item);
}
public:
void LoadItems()
{
//Read a file ... do something before etc..
std::unique_ptr<MyClass> someItem(new MyClass);
someItem->Name = "FooBar";
AddItem(someItem);
}
};
这是G ++错误消息之一:
error: use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = MyClass; _Dp = std::default_delete]'
使这项工作最好的方法是什么?我试图改变的AddItem-方法的签名如下所示:
void AddItem(std::unique_ptr<MyClass>& item) //takes a reference now...
这导致了真正的神秘的错误消息:
In instantiation of 'constexpr std::pair<_T1, _T2>::pair(_U1&&, const _T2&) [with _U1 = const char (&)[5]; = void; _T1 = const std::basic_string; _T2 = std::unique_ptr]': e:\devtools\winbuilds\include\c++\4.8.3\bits\hashtable_policy.h:177:55: required from 'std::__detail::_ ...
我建议尝试这段代码就飞到这里,看到错误消息: http://cpp.sh/