我正在尝试将擦除功能应用到我的方形列表功能但是当我写我的时它会给我这个编译器错误
错误1错误C2664:'square_list :: erase':无法转换 'std :: _ List_iterator< _Mylist>'中的参数1到'int *'
主要代码
#define nullptr NULL
template <typename T_>
class square_list
{
void erase(iterator it)
{
data.erase(it);
}
};
答案 0 :(得分:1)
std::list<T>::erase
将list :: iterator作为参数,但您尝试将square_list<T>::iterator
,a.k.a. T*
传递给它。
我会质疑为T*
定义迭代器为squared_list<T>
的逻辑,同时将list<T>::iterator
暴露给公共接口中的基础列表(begin()
和` end()1),因为这打破了封装。
然而,如果你想继续,你可以做这样的事情:
void erase(typename std::list<T>::iterator it)
{
data.erase(it);
}
或者,如果您想实际使用在squared_list
类中定义的迭代器:
void erase(iterator it)
{
// look for the underlying list iterator pointing to this value
auto underlyingIt = std::find_if(data.begin(), data.end(), [=](const T& node) {
return (&node == it);
});
if (underlyingIt != data.end()) {
data.erase(underlyingIt);
} else {
// handle case where the "iterator" is not found here
}
}
答案 1 :(得分:0)
使擦除函数采用std :: list迭代器,如下所示:
void erase(typename std::list<value_type>::iterator it)
{
data.erase(it);
}