我正在研究一个项目,作为其中的一部分,我需要创建一个第一个值为字符串的地图,第二个是指向类的指针。
所以我宣布它为地图<string, Objectfactory*> Objlib
Objectfactory
类有一个名为create()
的函数,它返回一个指向名为Object
的类的指针。
所以我有以下代码:
Object* newobject = (*Objlib.find("string")).second->create();
该程序编译得很好,但我在该行代码中得到运行时错误 地图/集合迭代器不可解除引用。
任何人都可以帮我解决这个问题吗?谢谢!
答案 0 :(得分:2)
如果地图中没有包含密钥"string"
的条目会怎样?您将获得end()
元素的迭代器。你无法取消引用它。
因此,请在取消引用之前检查您的地图是否包含该元素:
auto it = Objlib.find("string");
Object* newObject = it == Objlib.end() ? nullptr : it->second->create();
仅当元素存在于地图中时,才会调用create()
方法。否则,newObject设置为nullptr
。