2016-09-10 5 views
-1

Hallo Ich habe ein Problem mit einer Vorlage. Ich möchte einen Zeiger-Stack mit Vorlagen, aber ich bekomme den Fehler "nennt keinen Typ". Ich habe zwei Klassen, eine, die einen Stapel von Knoten verwaltet und die andere ist eine Knoten-Klasse. Das Problem liegt in der Knotenklasse und ich weiß nicht, wie ich es lösen soll. Könnte mir jemand erklären, wie ich ein Knotenobjekt mit einer in einer anderen Klasse deklarierten Vorlage erstellen soll? Der Code ist unten.Vorlage <class T>, "Fehler: .... nennt keinen Typ"

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; 
} 

und dies ist die Fehlermeldung: enter image description here

+0

Sie müssen 'Vorlage Klasse Knoten zu erklären;' kurz vor der Definition der Template-Klasse 'PointerStack'. Dann weiß 'PointerStack', dass' Node 'ein Typ ist. – Franck

Antwort

0

Sie PointerStack Klasse nicht von der Node-Klasse kennen. Sie müssen Ihre schriftliche Node-Klasse deklarieren, bevor PointerStack erklärt:

template<class T> 
class Node; 
/* Your code goes here */