C ++实现单链表

时间:2015-06-04 04:09:31

标签: c++ templates iterator

我试图在C ++中实现单链表。这是我的节点。

template <typename T> struct snode{
    explicit snode(const T& val, snode* ptr=0) : value(val), next(ptr){}
    T value;
    snode* next;
};

这是我的贱人

template <typename T> class slist{
public:
    class iterator;

    slist() : head_(0){}

    //Need to assign copy constructor
    //assignment operator
    //destructor

    bool empty() const{ return (head_ == 0);}
    int size() const;
    iterator begin();
    iterator end();

    void insert(iterator p, const T& t);
    void erase(iterator p);

private:
    snode<T>* head_;
};

这里是迭代器

class iterator{
public:
    explicit iterator(snode<T>* node = 0) : node_(node){}

    T& operator*(){return node_->value; }
    T* operator->(){return &(node_->value); }

    iterator& operator++(){
        if(node_ != 0)node_ = node_->next;
        return *this;
    }
    iterator operator++(int){
        iterator tmp = *this;
        if(node_ != 0) node_ = node_->next;
        return tmp;
    }
    bool operator==(const iterator& iter) const{return (node_ == iter.node_);}

    bool operator!=(const iterator& iter) const{ return (node_ != iter.node_);}

    snode<T>* node_;
};

问题是因为我在slist中声明了迭代器,我应该可以访问迭代器定义中的泛型T对象。这不会发生。我继续在T上喋喋不休地说

can't resolve symbol T

2 个答案:

答案 0 :(得分:0)

您没有显示明确的实例化(或转换)类型。 &#34; T&#34;无法编译,因为它无法解决问题&#34; T&#34;和解。迭代器类需要被模板化&#34;或者在类中明确地进行调整以便进行协调。

答案 1 :(得分:0)

由于iterator被声明为类模板slist的嵌套类,因此您需要使用以下语法定义iterator

template <typename T> class slist<T>::iterator { ... };