Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我不能在QMap.erase()中使用Java风格的QMapIterator?_C++_Qt_Qt5 - Fatal编程技术网

C++ 为什么我不能在QMap.erase()中使用Java风格的QMapIterator?

C++ 为什么我不能在QMap.erase()中使用Java风格的QMapIterator?,c++,qt,qt5,C++,Qt,Qt5,我正在Qt 5.12中尝试以下代码: //Definition of map QMap<int, ZoneData*> mapId2Pointer_; //Some values filled in mapId2Pointer_ here... QMapIterator<int, ZoneData*> iteratorId2Pointer(mapId2Pointer_); while (iteratorId2Poin

我正在Qt 5.12中尝试以下代码:

//Definition of map
QMap<int, ZoneData*>           mapId2Pointer_;

//Some values filled in mapId2Pointer_ here...

        QMapIterator<int, ZoneData*> iteratorId2Pointer(mapId2Pointer_);
        while (iteratorId2Pointer.hasNext())
        {
            iteratorId2Pointer.next();
            if (iteratorId2Pointer.value() == _climbZoneData)
            {
                iteratorId2Pointer = mapId2Pointer_.erase(iteratorId2Pointer); //<- ERROR
            }
        }
//地图的定义
QMap-mapid2指针;
//此处mapId2Pointer\中填写的某些值。。。
QMapIterator迭代器2指针(MAPID2指针);
while(iteratorId2Pointer.hasNext())
{
iteratorId2Pointer.next();
if(iteratorId2Pointer.value()
{

iteratorId2Pointer=mapId2Pointer_u2;erase(iteratorId2Pointer);//
QMapIterator
是一个“Java风格的迭代器”,而
QMap::iterator
是一个“STL风格的迭代器”。它们不兼容;您需要使用其中之一

您可以像这样使用
QMap::迭代器进行迭代:

QMap::迭代器i=mapId2Pointer.begin();
而(i!=mapId2Pointer_uz.end()){
如果(i.值()==\u爬升分区数据){
i=MAPID2指针。擦除(i);
}否则{
++一,;
}
}

注意,如果你没有删除中间的东西(它使你的迭代器无效,要求你将它设置为从代码中返回的值>擦除< /代码>),您可以使用for循环。

哦,天哪,您完全正确。我假设Java的迭代器可以与STL的迭代器互换。我没有注意到细微的差别。这就是为什么我不再寻找它们之间的一些(不存在的)类型转换。简单、清晰、简洁。谢谢!!