2016-12-01 5 views
1

二重リンクリストを実装しています。二重リンクリスト用のクラス内にtypedefステートメントを配置するとC++エラーが発生する

私のクラスには3つのtypedefステートメントがあります。

コンパイル時に「 'reference'が型名を指定していません」というエラーが発生します。私がinclude文の下でそれらを移動すると、このエラーは消えますが、新しいものが発生します。例えば、 'Node'が私の主なスコープで宣言されていないなどです。私のプログラムが正しく機能するためには、これらのtypedefステートメントのそれぞれがどこに行く必要があるのか​​分かりません。私はデフォルトコンストラクタも含めました。

#include <iostream> 
#include <cstdlib> 
#include <string> 
using namespace std; 


class linkedlist 
{ 
public: 

    typedef int element_type; 
    typedef element_type& reference; 
    typedef const element_type& const_reference; 
    linkedlist(); 
    ~linkedlist(); 
    bool empty() const; 
    void clear(); 
    reference back(); 
    const_reference back() const; 
    reference front(); 
    const_reference front() const; 
    linkedlist& operator=(const linkedlist& l); 
    void pop_back(); 
    void pop_front(); 
    void push_back(const element_type& x); 
    void push_front(const element_type& x); 
    void sort(); 

    explicit linkedlist(unsigned int n); 
    void check() const; 
    void rcheck() const; 


private: 
    struct Node 
    { 
     element_type elem; 
     Node* next; 
     Node* prev; 
    }; 
    Node* head; 
    Node* tail; 
    int size; 
}; 

linkedlist::linkedlist() 
{ 
    head = new Node; 
    tail = new Node; 
    head->next = tail; 
    head->prev = NULL; 
    tail->next = NULL; 
    tail->prev = head; 
    size = 0; 
} 

...

+2

[できません](http://coliru.stacked-crooked.com/a/03bb01431652abbe) – cpplearner

+0

どのコンパイラを使用していますか? –

+0

なぜこれをC++で行うのですか? Cでは、問題ないですが、C++では 'list'を持っています! C++でtypedefを使う理由なぜテンプレートを使用しないのですか?どうしてあなたは 'nullptr'ではなくNULLを使うのですか?なぜコンストラクタでinitリストを使用しないのですか? – Stargateur

答えて

1

私はあなたのための部分的な答えを持っている:あなたのreferenceは、クラス内で定義されている場合、あなたは彼らが定義されている場合、メンバ関数の定義の戻り値の型にクラス名を含める必要がクラス外。例えば。

linkedlist::reference linkedlist::back(){/*...*/} 

あなたがそれを使用して、任意のコードが表示されませんのでNodeも問題である理由私は推測することはできません。

関連する問題