list::erase 的 C++ 没有匹配函数
C++ no matching function for list::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);
}
}
}
我收到编译错误:
error: no matching function for call to ‘std::__cxx11::list::erase(std::__cxx11::list::const_iterator&)’
itr = myList.erase (itr);
到目前为止我所做的一切都是基于我在这里找到的
http://www.cplusplus.com/reference/list/list/erase/.
我还阅读了有关删除列表中项目的节点方法。我只是希望让这个方法工作,因为它看起来更好,我很想知道我做错了什么。
您使用的是 C++11 吗? std::list::erase 自 c++11 起仅支持 const_iterator
s:
http://en.cppreference.com/w/cpp/container/list/erase
这是 GCC 或更具体地说是 libstdc++ 中的错误,直到 4.9.0
才得到修复
C++11 强制要求的缺失重载:
iterator erase( const_iterator pos );
导致您的代码失败。
我目前正在尝试循环访问 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);
}
}
}
我收到编译错误:
error: no matching function for call to ‘std::__cxx11::list::erase(std::__cxx11::list::const_iterator&)’ itr = myList.erase (itr);
到目前为止我所做的一切都是基于我在这里找到的 http://www.cplusplus.com/reference/list/list/erase/.
我还阅读了有关删除列表中项目的节点方法。我只是希望让这个方法工作,因为它看起来更好,我很想知道我做错了什么。
您使用的是 C++11 吗? std::list::erase 自 c++11 起仅支持 const_iterator
s:
http://en.cppreference.com/w/cpp/container/list/erase
这是 GCC 或更具体地说是 libstdc++ 中的错误,直到 4.9.0
才得到修复C++11 强制要求的缺失重载:
iterator erase( const_iterator pos );
导致您的代码失败。