为我的班级实现擦除功能

时间:2014-02-18 05:07:44

标签: c++ visual-c++ boost c++11 stl

我正在尝试将擦除功能应用到我的方形列表功能但是当我写我的时它会给我这个编译器错误

  

错误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);
    }


};

2 个答案:

答案 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);
}

实例:http://ideone.com/c3T9Hs