简体   繁体   English

在C ++中实现双向链接列表时迭代器出错

[英]Error in iterator while implementing doubly linked list in C++

I am getting an ambiguous error in which I am trying to implement the iterator of a link list class. 我收到一个模棱两可的错误,其中我试图实现链接列表类的迭代器。 The program says that the function is not a part of my class, when it is. 该程序说该函数不是我类的一部分。

Tester program: 测试程序:

for(list<int>::iterator it = l3.begin() ; it!=l3.end(); ++it)
        cout<<(int)(it.value())<<" ";

Link List Class: 链接列表类别:

template<typename T>
class list
{
    int len;
    link<T>* head, tail;
    public:
        /*class functions*/

        class iterator{
            link<T>* ptr;
            public:
                iterator() {ptr = nullptr;}
                iterator(link<T>* p) {ptr = p;}
                link<T>* get_ptr(){return ptr;}
                iterator(iterator a){ptr = a.get_ptr();}
                ~iterator(){delete[] ptr;}
                T& value(){return ptr->get_val();}
                void operator=(iterator iter){ptr = iter.get_ptr();}
                bool operator==(iterator iter){return ptr == iter.get_ptr();}
                void operator++(){ptr = ptr->get_next();}
                void operator--(){ptr = ptr->get_prev();}
                bool operator!=(iterator iter){return ptr != iter.get_ptr();}  
        };
        iterator begin(){return iterator(head);}
        iterator end(){return iterator(nullptr);};
};

Error: 错误:

listtest.cpp: In function ‘int main(int, const char**)’:
listtest.cpp:24:19: error: ‘class mod::list<int>::iterator’ has no member named ‘value’
cout<<(int)(it.value())<<" ";

I have commented the definitions of all the functions of the list class, but still am getting the same error. 我已经评论了list类的所有功能的定义,但是仍然遇到相同的错误。 This is my link class, which acts as node to the list class. 这是我的link类,它充当list类的节点。

template<typename T>
class list;

template<typename T>
class link{
    template<typename U>
        friend class list;
    private:
        T value;
        link<T>* prev; 
        link<T>* next;
    public:
        link(){prev = next = nullptr;}
        link(const T& val){value = val; prev = next = nullptr;}
        T& get_val(){return value;}
        link<T>* get_prev(){return prev;}
        link<T>* get_next(){return next;}           
};

The problem seems to be in one of the ctors for the iterator: 问题似乎出在迭代器的ctor之一中:

 iterator(iterator a) { ptr = a.get_ptr(); }

It should be: 它应该是:

iterator(iterator& a) { ptr = a.get_ptr(); }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM