我目前正在尝试循环显示 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/
我还读到了一个删除列表中项目的节点方法。我只是希望让这种方法起作用似乎更好,我很想知道我做错了什么。
答案 0 :(得分:4)
您使用的是C ++ 11吗?从c ++ 11开始,std :: list :: erase仅支持const_iterator
:
http://en.cppreference.com/w/cpp/container/list/erase
答案 1 :(得分:4)
这是GCC或更具体的libstdc ++中的一个错误,直到4.9.0才修复
C ++ 11规定的缺失重载:
iterator erase( const_iterator pos );
导致您的代码失败。