[英]iterator passed by reference set/map iterator not dereferencable
我在通过引用传递迭代器时遇到了一些麻烦。 在程序中,我有三个类:A类,其中包含一个std :: map>作为私有成员。 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
};
当我执行此代码时,我确定“ test”在地图中。 因此,当我在类A中取消引用它时,代码可以正常运行,并且得到它-> first =“ test”。 但是在通过引用将其传递回C类之后,出现了以下错误:set / map迭代器不可取消引用。 我认为迭代器一旦返回就没有指向它在A类中指向的对象。您能否解释一下原因以及如何解决该问题? 非常感谢您的帮助。
我收到此错误:set / map迭代器不可取消。
这是因为在B.A_access
返回中使用的A
对象:
B.A_access().theMap_access(to_access, it);
执行上述行后不再存在。 因此,您设置的迭代器引用的是不存在的map
,因为该map
也已消失。
原因是B.A_access()
返回A
对象的副本 ,而不是包含您要使用的std::map
的实际A
对象的副本 。
如果你想用实际的A
包含对象std::map
要操作,那么A_access
应该返回一个引用A
,而不是复制A
。
因此,解决方法应该是:
A& A_access(){return a;}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.