私の課題は、標準ライブラリのように機能するクラスを作成することList
です。最後からデクリメントするときにリンクされたリストの末尾にアクセスする必要があるため、イテレータを正しく機能させることができません。これが私のヘッダーファイルのセクションです:
typedef int T;//for now; eventually will be templated
class list;//**forward declaration, doesn't let other classes know about _tail.**
class Node
{
//this works fine; class definition removed to make post shorter
};
class list_iterator
{
private:
Node* _node;
list* _list;
public:
//constructor
list_iterator& operator--(){_node=_node?(_node->_prev):(_list->_tail);return *this;}
//some other declarations
};
class list
{
friend class list_iterator;
private:
Node/*<T>*/ *_head,***_tail**;
int _size;
public:
typedef list_iterator iterator;
//some constructors and other method declarations
iterator begin() const {iterator it(_head);return it;}
iterator end() const {iterator it(0);return it;}
//more method declarations
};
重要な部分は太字にしてみましたが、アスタリスクで囲っているだけです。注: ほとんどのメンバー関数は cpp ファイルで定義されています。それらはすべて、短い投稿のためにたまたま削除されます。