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