【问题标题】:C++ implementation of a singly linked list单链表的 C++ 实现
【发布时间】:2015-08-18 12:43:52
【问题描述】:

我正在尝试在 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

【问题讨论】:

    标签: c++ templates iterator


    【解决方案1】:

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

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

    【讨论】:

    • @Jumper,有很多事情会阻止您的代码工作。这是一个展示语法正确性的骨架工作程序。 ideone.com/5hCk6d
    【解决方案2】:

    您没有显示显式实例化(或强制转换)类型。 "T" 无法编译,因为它无法解析 "T" 协调的内容。迭代器类需要“模板化”或在类中显式强制转换才能协调。

    【讨论】:

    • 我不确定,我跟着。你能稍微修改一下代码以帮助我理解吗?
    猜你喜欢
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 2021-11-13
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多