[英]Error instantiating std::map with std::shared_ptr with XCode/Clang
编辑了更多代码,再现了错误,将地图更改为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
我将其更改为无序地图,因为我无法提供“较少”且不需要订购。
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/c++/v1/unordered_map:544:11:没有匹配的构造函数,用于初始化“ value_type”(也称为“ pair”)
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/c++/v1/memory:1641:31:实例化功能模板特化'std :: __ 1 :: __ hash_value_type> :: __ hash_value_type& >'在这里要求
有一长串候选构造函数被排除在外,如果您需要查看它们,还可以进行其他操作。
那我犯什么新手错误呢?
映射的Emplace需要一个参数作为键,然后为要放置的事物添加后续参数。 所以
l1->actors.emplace(npc);
无法工作,因为它仅提供一个参数-没有键。 因为您已经在地图中构造了想要的东西,所以您根本不需要emplace
。 您需要指定要将元素放置在哪个键上,然后最简单的选择是
l1->actors[42] = npc;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.