我收到以下错误:
1>c:devlinkedlistlinkedlistdoublelinkedlist.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); }
有谁知道如何解决这个问题?完整的代码可以在这里找到。
您没有正确使用 std::delete。 您应该提供两个迭代器,而不是一个迭代器来删除元素。
正在发生的事情是编译器认为您正在尝试从接受字符指针的<cstdio>
中调用 std::remove 因此会出现错误。
若要修复此错误,请使用两个迭代器参数调用std::remove
。 第二个参数表示要删除的元素之后的一个元素:
std::remove(it, std::next(it));