c ++ map / set iterator not dereferencable --- map <const char =“”*,=“”string =“”>

时间:2015-09-09 15:53:46

标签: c++ dictionary

{"error":"forbidden","reason":"CSRF Cookie/Header mismatch"}

这是我的代码。
我在班级function(head, req) { var id = req.query.id; var contactName = 'This is the new contact name!!'; var sendString = '{"PrimaryContactName":"' + contactName + '"}'; var xhr = new XMLHttpRequest(); xhr.open('PUT", <URL>, false); xhr.send(sendString); var sendStatus = xhr.status; } 的函数class A { public: map<string, string> strs; // it's initialized in a function map<const char *, string> myMap; virtual void setMyMap() { myMap.insert({str.begin()->first.c_str(), "aaa"}); } }; class B : public class A {}; class C : public class B { virtual void setMyMap() { B::setMyMap(); for (auto it = myMap.begin(); it != myMap.end(); ++it) { cout << it->first << std::endl; // "a" } cout<<(myMap.find("a") == myMap.end()); // 1 myMap.find("a")->first; // get the error } }; 中收到错误map/set iterator not dereferencable 我收到此错误是因为setMyMapC 但我不知道为什么。令我惊讶的是,我只是在同一个函数中打印这个地图,我可以看到这张地图的所有myMap.find("a") == myMap.end()。在这里,我可以看到true。我真的不知道为什么我试图找到相同的first但失败了。 a肯定在地图中。否则我无法使用first打印它。

1 个答案:

答案 0 :(得分:0)

const char *作为键的地图不会比较字符串,只会比较指针地址。不同地址的两个字符串"a"不会相等。您必须使用std::string或自定义比较功能。不要对字符串文字的地址做出假设。