2016-04-05 10 views
0

リンクリストクラスのイテレータを実装しようとしているあいまいなエラーが発生しています。プログラムは、その関数が私のクラスの一部ではないと言っています。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;}   
}; 
+2

[MCVE]を提供してください。 – Barry

+0

Clangは 'error:invalid constructor;のようなものです。 iterator(iterator a){ptr = a.get_ptr();} 'の代わりに、リスト :: iterator(constリスト :: iterator&)を意味していました。次に、 'const'の正しさで問題を取得します。 'list ' 'head'を作成するときに決して初期化されず、無効なデータを指しているので、私はsegfaultを取得することを修正した。これらのエラーを修正すると、おそらく次の作業が明らかになります。 – nwp

答えて

0

問題は、イテレータのためのctorsの一つであるように思わ:

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

それは次のようになります。

iterator(iterator& a) { ptr = a.get_ptr(); } 
関連する問題