编辑了更多重现错误的代码,将地图更改为unordered_map。
我已经离开并编写纯粹的目标C已经超过一年了所以请原谅我,如果这是一个新手的错误!
我在针对iOS 7模拟器的XCode 5中编译为.mm(Objective-C ++)。它使用clang-503.0.40。基于LLVM 3.4。
以下是代码:
typedef uint32_t uint32;
class Actor {
public:
std::string name;
std::set<uint32> behaviors;
Actor() { }
private:
};
class Location {
public:
// .. some stuff ...
std::unordered_map<uint32,std::shared_ptr<Actor>> actors; // A list of actors in the location
Location() { }
private:
};
然后在我做的一个函数中 -
std::shared_ptr<Location> l1(new Location);
std::shared_ptr<Actor> npc(new Actor);
l1->actors.emplace(npc); // ERROR HAPPENS HERE
我将其更改为无序地图,因为我无法提供更少的&#34;并且不需要订购。
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/c ++ / v1 / unordered_map:544:11:没有用于初始化&#39; value_type&#39;的匹配构造函数(又名&#39;对&#39;)
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/c ++ / v1 / memory:1641:31:在实例化函数模板特化&#39; std :: __ 1 :: __hash_value_type&gt; :: __ hash_value_type&amp;&gt;&#39;请求
如果您需要看到它们,那么排除了一长串候选构造函数以及其他类似的东西。
那么我做的新手错误是什么?
答案 0 :(得分:1)
映射的Emplace需要一个关键字参数,然后是放置事物的后续参数。所以
l1->actors.emplace(npc);
无法工作,因为它只提供一个参数 - 没有密钥。你根本不需要emplace
,因为你已经在地图中构建了你想要的东西。您需要指定要放置元素的键,然后最简单的选项是
l1->actors[42] = npc;