2016-09-10 11 views
-1

こんにちはテンプレートに問題があります。私はテンプレートを使用してポインタのスタックが欲しいが、私は "タイプに名前をつけない"というエラーが出る。私は2つのクラスを持っています.1つはノードのスタックを管理し、もう1つはノードクラスです。問題はノードクラスにあり、解決方法はわかりません。他のクラスで宣言されているテンプレートを使用してノードオブジェクトを作成する方法を説明する人がいますか?コードは以下の通りです。テンプレート<class T>「エラー:....タイプに名前を付けていません」

template<class T> class PointerStack 
    { 
    public: 
     PointerStack(); 
     bool isEmpty(); 
     bool push(T dataIn); 
     bool pop(); 
     bool top(T &topItem); 
     void clear(); 
     void print(); 
    private: 
     int counter; 
     Node<T>* start; 
}; 

template<class T> 
class Node 
{ 
    public: 
     Node(T dataIn); 
     Node(T dataIn, Node vorigeIn); 
     T getData(); 
     Node* getPrevious(); 
    private: 
     T data; 
     Node* previous; 
     Node* next; 
}; 


template<class T> 
PointerStack<T>::PointerStack() 
{ 
    counter == 0; 
} 

template<class T> 
bool PointerStack<T>::isEmpty() 
{ 
    if(counter == 0) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

template<class T> 
bool PointerStack<T>::push(T data) 
{ 
    if(isEmpty()) 
    { 
     start = new Node<T>(data); 
     counter++; 
     return true; 
    } 
    else 
    { 
     Node<T> dummy = start; 
     start = new Node<T>(data, dummy); 
     counter++; 
     return true; 
    } 
} 

template<class T> 
bool PointerStack<T>::pop() 
{ 
    if(isEmpty()) 
    { 
     return false; 
    } 
    else 
    { 
     Node<T> dummy = start; 
     start = start->vorige; 
     counter--; 
     delete dummy; 
     return true; 

    } 
} 

template<class T> 
bool PointerStack<T>::top(T &topItem) 
{ 
    if(isEmpty()) 
    { 
     return false; 
    } 
    else 
    { 
     topItem = start.getData(); 
     return true; 
    } 
} 

template<class T> 
void PointerStack<T>::clear() 
{ 
    while(isEmpty()) 
    { 
     pop(); 
    } 
} 

template<class T> 
void PointerStack<T>::print() 
{ 
    Node<T> dummy = start; 
    if(!isEmpty()) 
    { 
     for(int i = 0; i < counter; i++) 
     { 
      std::cout<<dummy->getData(); 
      dummy->v; 

     } 
    } 
} 

template<class T> 
Node<T>::Node(T dataIn) 
{ 
    data = dataIn; 
    previous = NULL; 
    next = NULL; 
} 

template<class T> 
Node<T>::Node(T dataIn, Node previousIn) 
{ 
    data = dataIn; 
    previous = previousIn; 
    next = NULL; 
    previousIn->volgende = this; 

} 

template<class T> 
T Node<T>::getData() 
{ 
    return data; 
} 

template<class T> 
Node<T>* Node<T>::getPrevious() 
{ 
    return previous; 
} 

と、これはエラーメッセージです: enter image description here

+0

あなたは 'テンプレートクラスノードを宣言する必要があります;'ちょうどテンプレートクラスの定義 'PointerStack'前に。 'PointerStack'は' Node 'が型であることを知ります。 – Franck

答えて

0

あなたPointerStackクラスは、Nodeクラスを知りません。あなたはPointerStackを宣言する前に、Nodeクラスを宣言転送する必要があります:

template<class T> 
class Node; 
/* Your code goes here */ 
関連する問題