私は楽しいために自分自身の二重リンクリストの実装を作成しています。リスト自体を書き終えましたが、今はイテレータを追加しようとしています。私はこのようなものの構文規則について混乱しています。ここで私が取得していますエラーされます。その下にテンプレート化された二重リンクリストのイテレータを作成する際の問題
/****************************/
/* d_list class */
/* with exceptions classes */
/****************************/
class d_list_error{};
class d_list_empty{};
template <class T>
class d_list_iter;
template <class T>
class d_list{
public:
d_list();
d_list(const d_list &_dl);
d_list &operator=(const d_list &_dl);
~d_list();
void push_back(T item);
void push_front(T item);
void pop_back();
void pop_front();
bool isEmpty() const;
unsigned int size() const;
void clear();
private:
struct node{
node *prev;
node *next;
T data;
};
node *head;
node *tail;
unsigned int currSize;
d_list_iter<T> *dli;
/* Utility Functions */
void initFirstEle(T item, node* first);
void copyAll(const d_list<T> &_dl);
};
/*************************/
/* d_list iterator class */
/*************************/
class d_iter_already_exists {};
template <class T>
class d_list_iter{
public:
d_list_iter(const d_list &_dl);
~d_list_iter();
T getNext() const;
private:
friend class d_list;
d_list<T> *dl;
node *next;
node *prev;
bool valid;
};
d_listのために定義されたすべてのメンバ関数である:
error C2990: 'd_list' : non-class template has already been declared as a class template
は、ここでは全てに位置し、ヘッダファイルがあります。私はイテレーターのためにそれらをまだ書いていない。 d_listは私のすべてのテストに基づいて完全に動作しています。私はシンタックスエラーに遭遇していると思います。これは私にとって未知の領域です。
少なくとも最初の努力では、イテレータクラスを反復するクラスの中にネストして書くのが最も簡単です。 –
それはスマートだったでしょう... – Slims
まあ...それはどちらかの方法で行うことができます。イテレータを実際に外に置くと、コンテナが不完全な型で動作するようになります。また、iteratorクラスはネストされていてもテンプレートでなければなりません。なぜなら、余分なパラメータを 'const_iterator'から' iterator'を と区別する必要があるからです。 – Potatoswatter