我在通过引用传递迭代器时遇到了一些麻烦。在程序中,我有三个类:包含std :: map>的类A;作为私人会员。 B级将A级作为私人成员。并且在其构造函数中接收类B的类C.在类C中,我试图检索指向地图的迭代器,如下所示:
class A(){
private:
std::map<std::vector<>> theMap;
public:
void theMap_access() {std::string to_access , std::map<std::vector<>>::iterator &it){
it = theMap.find(to_access);
it-> first; //OK
}
};
class B(){
private:
A a;
public:
A A_access(){return a;}
};
class C(B &b){
public:
std::map<std::vector<>>::iterator it;
std::string to_access = "test";
B.A_access().theMap_access(to_access, it);
it-> first; //KO
};
当我执行此代码时,我确信&#34;测试&#34;在地图上。因此,当我在A类中取消引用它时,代码运行正常,我得到它 - &gt; first =&#34; test&#34;。但是在通过引用将它传递回C类之后,我得到了这个错误:set / map iterator not dereferencable。我假设一旦传回的迭代器没有指向它在A类中指向的东西。你能解释一下我为什么以及如何解决这个问题?非常感谢你的帮助。
答案 0 :(得分:0)
我收到此错误:set / map iterator not dereferencable。
这是因为A
返回此处使用的B.A_access
对象:
B.A_access().theMap_access(to_access, it);
不再存在。因此,您设置的迭代器指的是不存在的map
,因为map
也已消失。
原因是B.A_access()
返回A
对象的副本,而不是包含A
的实际std::map
对象你正试图用。
如果您想使用包含您想要操作的A
的实际std::map
对象,则A_access
应该返回对A
的引用,而不是A
。
所以修复应该是:
A& A_access(){return a;}