c++ - 调试断言失败 : map/set iterator not dereferencable

标签 c++

我正在做一个项目,作为项目的一部分,我需要创建一个映射,其中第一个值是字符串,第二个是指向类的指针。

所以我把它声明为 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/

相关文章:

c++ - 是否可以将整数的每个数字存储到 char 数组中?

c++ - 全局加载 Vulkan 函数

c++ - 判断变量是否为指针的宏

c++ - 从虚拟方法返回派生对象作为基础

c++ - 将 gcov 与子进程和共享库一起使用时没有覆盖

c++ - SQLite3 对象不理解?

c++ - 数行和模数 C++

c++ - QTreeWidget 子类,停止放置指示器显示给定的不需要的 dropIndicatorPosition

c++ - 空终止字符数组(c 字符串)没有 for 循环不打印

C++ 模板帮助,使用模板进行集成