我正在做一个项目,作为项目的一部分,我需要创建一个映射,其中第一个值是字符串,第二个是指向类的指针。
所以我把它声明为 map <string, Objectfactory*> Objlib
Objectfactory
类有一个名为 create()
的函数它返回一个指向名为 Object
的类的指针.
所以我有以下代码:
Object* newobject = (*Objlib.find("string")).second->create();
程序编译得很好,但我在那行代码处遇到运行时错误,说明 map/set 迭代器不可取消引用。
谁能帮我解决这个问题?谢谢!
最佳答案
如果键为 "string"
的条目不在 map 中会怎样?您将得到一个指向 end()
元素的迭代器。你不能取消引用它。
因此,在取消引用之前检查您的 map 是否包含该元素:
auto it = Objlib.find("string");
Object* newObject = it == Objlib.end() ? nullptr : it->second->create();
仅当元素存在于 map 中时,才会调用 create()
方法。否则,newObject 设置为 nullptr
。
关于c++ - 调试断言失败 : map/set iterator not dereferencable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22134451/