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

时间:2016-05-09 05:56:30

标签: c++ list linked-list iterator erase

我目前正在尝试循环显示 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);
        }
    }
}

我收到了编译错误:

  

错误:没有匹配函数来调用'std :: __ cxx11 :: list :: erase(std :: __ cxx11 :: list :: const_iterator&amp;)'        itr = myList.erase(itr);

到目前为止,我所做的一切都是基于我在这里找到的 http://www.cplusplus.com/reference/list/list/erase/

我还读到了一个删除列表中项目的节点方法。我只是希望让这种方法起作用似乎更好,我很想知道我做错了什么。

2 个答案:

答案 0 :(得分:4)

您使用的是C ++ 11吗?从c ++ 11开始,std :: list :: erase仅支持const_iteratorhttp://en.cppreference.com/w/cpp/container/list/erase

答案 1 :(得分:4)

这是GCC或更具体的libstdc ++中的一个错误,直到4.9.0才修复

C ++ 11规定的缺失重载:

iterator erase( const_iterator pos );

导致您的代码失败。