c++ - 帮助 C++ 列表删除功能

标签 c++ iterator

我正在尝试进行简单的删除操作,但不断出现错误。

这是我删除的代码片段:

std::list<Mine*>::iterator iterMines = mines.begin();
for(int i = oldSizeOfMines; i >0 ; i--, iterMines++)
{
    if(player->distanceFrom(*iterMines) < radiusOfOnScreen)
    {
        onScreen.push_back(*iterMines);
        iterMines = onScreen.erase(iterMines);
        iterMines--;
    }
}

我不断收到一条编译器消息:

1>c:\users\owner\desktop\bosconian\code\bosconian\environment.cpp(158) : error C2664: 'std::list<_Ty>::_Iterator<_Secure_validation> std::list<_Ty>::erase(std::list<_Ty>::_Iterator<_Secure_validation>)' : cannot convert parameter 1 from 'std::list<_Ty>::_Iterator<_Secure_validation>' to 'std::list<_Ty>::_Iterator<_Secure_validation>'
1>        with
1>        [
1>            _Ty=SpaceObject *,
1>            _Secure_validation=true
1>        ]
1>        and
1>        [
1>            _Ty=Mine *,
1>            _Secure_validation=true
1>        ]
1>        and
1>        [
1>            _Ty=SpaceObject *,
1>            _Secure_validation=true
1>        ]
1>        No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

我很困惑,因为我相信我给了它正确的迭代器。

我的是SpaceObject的子类(第二代子类)

这有什么关系吗?我该如何解决?

最佳答案

问题是您正在尝试使用地雷的迭代器作为屏幕列表中的迭代器。这是行不通的。

你的意思是调用 mines.erase(iterMines) 而不是 onScreen.erase(iterMines) 吗?

关于c++ - 帮助 C++ 列表删除功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/373462/

相关文章:

c++ - friend 模板参数相关查找

c++ - 这里使用迭代器有什么问题

C++11 迭代器和返回的 std::unique_ptr 的范围

c++ - 全局范围与全局命名空间

c++ - 从 C++ 中用户定义数据类型的 vector 中删除元素

c++ - 具有继承的 friend 类

c++ - 二维 vector 上的迭代器

c++ - 如果您要从队列中弹出对象,可以从队列中取出 "Move"对象吗?

java - 创建具有给定分布的无限迭代器

c++ - 如何在 Map 中存储集合容器的迭代器列表