我遇到以下错误:
1>c:\dev\linkedlist\linkedlist\doublelinkedlist.h(390): error C2664: 'int remove(const char *)': cannot convert argument 1 from 'DoubleLinkedList<int>::iterator' to 'const char *'
这是出现错误的实例。
template <class T>
void DoubleLinkedList<T>::eraseVal(const T& value) {
iterator it = begin();
while ((it = std::find(it, end(), value)) != end()) { it = std::remove(it); }
}
更具体地说,错误来自以下行:
while ((it = std::find(it, end(), value)) != end()) { it = std::remove(it); }
有人知道如何解决这个问题吗?完整的代码可以在here中找到。
答案 0 :(得分:1)
您没有正确使用std::remove。您应该提供两个迭代器,而不是一个用于删除元素的迭代器。
正在发生的事情是,编译器认为您正在尝试从<cstdio>
调用std::remove,而该{@ 3}}使用字符指针,因此会出错。
要解决该错误,请使用两个迭代器参数调用std::remove
。第二个参数表示要删除的元素之后的一个元素:
std::remove(it, std::next(it));