Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用XCode/Clang的std::shared_ptr实例化std::map时出错_C++_Xcode5_Clang_Objective C++_Stdmap - Fatal编程技术网

C++ 使用XCode/Clang的std::shared_ptr实例化std::map时出错

C++ 使用XCode/Clang的std::shared_ptr实例化std::map时出错,c++,xcode5,clang,objective-c++,stdmap,C++,Xcode5,Clang,Objective C++,Stdmap,编辑了更多复制错误的代码,将映射更改为无序映射 我已经离开并编写纯目标C一年多了,所以如果这是一个新手的错误,请原谅我 我在针对iOS7模拟器的XCode 5中编译为.mm(Objective-C++)。它使用clang-503.0.40。基于LLVM3.4 代码如下: typedef uint32_t uint32; class Actor { public: std::string name; std::set<uint32> behaviors; A

编辑了更多复制错误的代码,将映射更改为无序映射

我已经离开并编写纯目标C一年多了,所以如果这是一个新手的错误,请原谅我

我在针对iOS7模拟器的XCode 5中编译为.mm(Objective-C++)。它使用clang-503.0.40。基于LLVM3.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:
};
typedef uint32\u t uint32;
班级演员{
公众:
std::字符串名;
设置行为;
Actor(){}
私人:
};
类位置{
公众:
//…一些东西。。。
std::无序映射参与者;//位置中的参与者列表
位置(){}
私人:
};
然后在一个函数中,我这样做-

std::shared_ptr<Location> l1(new Location);
std::shared_ptr<Actor> npc(new Actor);
l1->actors.emplace(npc); // ERROR HAPPENS HERE
std::共享的ptr l1(新位置);
std::shared_ptr npc(新演员);
l1->演员安置(npc);//这里发生了错误
我把它改成了一张无序的地图,因为我不能提供一张“更少”的地图,也不需要订购

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/c++/v1/unordered\u映射:544:11:没有用于初始化“value\u type”(也称为“pair”)的匹配构造函数

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/c++/v1/memory:1641:31:函数模板专门化的实例化中“std:::uu hash_value_type>::u hash_value_type&>”

有一整条长长的候选构造函数链被排除在外,如果你需要看的话,还有其他类似的事情


那么,我犯了什么新手错误呢?

地图的放置需要一个键参数,然后是要放置的东西的后续参数。所以

l1->actors.emplace(npc);
无法工作,因为它只提供一个参数-没有键。你根本不需要
安置
,因为你已经在地图上构建了你想要的东西。您需要指定要将元素放在哪个键上,然后最简单的选项是

l1->actors[42] = npc;

你能提供更多关于代码和错误的详细信息吗?@sfjac哪一个更详细?我认为不需要更多了。但我并不是专家。我不知道——不足以复制。C++没有什么错误,即使我把它放在.mm文件(我是C++的人,而不是Objc)中,所有的东西都会编译。细节补充说,我还没有用XCode永远调试C++,忘记了如何找到它发生的确切的行。代码现在会复制错误如果你之前给出了失败的代码,你会得到更快的答案。谢谢。你暴露了一个愚蠢的逻辑,我应该用一套!我已经习惯了OBJ-C容器,我忘记了一些非常基本的东西。。。