C++ C++;没有与list::erase匹配的函数

C++ C++;没有与list::erase匹配的函数,c++,list,linked-list,iterator,erase,C++,List,Linked List,Iterator,Erase,我目前正试图在char类型的链表中循环。当遇到一个参数时(如果它包含字母“w”),我会尝试使用list::erase删除列表项。我只是希望收到一些关于使用这个函数的建议,我只看到了int型链表的例子,我无法判断它是否会工作,因为它是char或者是什么原因。当我尝试编译以下代码时: void filterFile(list <char> &myList) { list<char>::const_iterator itr; for (itr = my

我目前正试图在char类型的链表中循环。当遇到一个参数时(如果它包含字母“w”),我会尝试使用list::erase删除列表项。我只是希望收到一些关于使用这个函数的建议,我只看到了int型链表的例子,我无法判断它是否会工作,因为它是char或者是什么原因。当我尝试编译以下代码时:

void filterFile(list <char> &myList)
{
    list<char>::const_iterator itr;

    for (itr = myList.begin(); itr != myList.end(); itr++ )
    { 
        if (*itr == 'w' || *itr == 'W'){
            itr = myList.erase (itr);
        }
    }
}
void过滤器文件(列表和myList)
{
列表::常量迭代器itr;
对于(itr=myList.begin();itr!=myList.end();itr++)
{ 
如果(*itr==“w”|*itr==“w”){
itr=myList.erase(itr);
}
}
}
我收到编译错误:

错误:调用“std::_cxx11::list::erase(std:u cxx11::list::const\u迭代器&)”时没有匹配的函数 itr=myList.erase(itr)

到目前为止,我所做的一切都是基于我在这里发现的


我还了解了删除列表中项目的节点方法。我只是希望这个方法能工作,因为它看起来更好,我很想知道我做错了什么。

你在使用C++11吗?自c++11:

这是libstdc++中的一个bug,或者更具体地说是libstdc++中的一个bug,直到4.9.0才修复

C++11强制要求的缺失重载:

iterator erase( const_iterator pos );

导致代码失败。

不应使用迭代器const@Photon不对。我建议尝试使用常规迭代器而不是常量迭代器。在我看来,常量迭代器应该可以工作,但值得一试,看看这是否是问题所在。您的编译器支持c++11吗?另外,当您执行
erase
时,仍然会点击
itr++
,这意味着如果您删除了最后一个元素,那么您就可以通过它进行迭代,在其他情况下,您会错过检查连续的
W
s。(cpprference.com比cplusplus.com更可靠)谢谢你,汤姆。我确实将我的
常量迭代器
更改为
迭代器
,is现在将编译并运行。谢谢你的帮助:)还有,当我在这里时,有人知道如何更改所列项目中的值吗。例如,类似于
*itr='p'
(与上面的代码相同,替换擦除行)。@mark,这应该像您在这里键入的一样
*itr='p'
,条件是您使用的是常规的
迭代器而不是
常量迭代器
,谢谢,我刚才问了这个问题,因为我之前正试图解决这个问题,但自从我从一个
常量迭代器更改它以来,我就没有尝试过它。感谢您的帮助:)