簡體   English   中英

在C ++中實現雙向鏈接列表時迭代器出錯

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

我收到一個模棱兩可的錯誤,其中我試圖實現鏈接列表類的迭代器。 該程序說該函數不是我類的一部分。

測試程序:

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

鏈接列表類別:

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

錯誤:

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())<<" ";

我已經評論了list類的所有功能的定義,但是仍然遇到相同的錯誤。 這是我的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;}           
};

問題似乎出在迭代器的ctor之一中:

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

它應該是:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM