2016-12-01 3 views
0

ich eine Template-Klasse, zum BeispielErbt eine geerbte Klasse eine geschachtelte Klasse?

template<class T,class Key> 
    class BinaryTree:{ 
    public: 
    class node {}; 
    } 

und jetzt will ich aus der Klasse erben, zum Beispiel:

class AVLTree : public Binary Tree 

Das Problem, das ich mit stecken ist, dass die Funktionen, die ich will Implementieren in AVLTree erkennt den Knoten nicht. Zum Beispiel lassen Sie die Funktion

void rotateLL(node* n) 

Der Compiler sagt sein:

node has not been declared 

Wie kann ich dieses Problem lösen?

+0

Sorry, das erste Mal, dass ich hier frage. Ich habe die Frage bearbeitet. –

+0

Sie vermissen sehr wichtige Details. Ist 'AVLTree' auch eine Template-Klasse? – AnT

Antwort

0

node ist, was eine abhängige Name genannt wird, da es sich um ein Mitglied der Basisklasse, die auf Template-Parameter abhängig ist. Sie benötigen:

template <class T, class Key> 
class AVLTree : public BinaryTree<T, Key> { 
public: 
    void rotateLL(typename AVLTree::node *n); 
}; 
+0

Sie sind ein Lebensretter! –

0

Es ist schwer zu erraten, auf was Sie gerade stoßen - Ihr Code in der Frage hat ziemlich viele Tippfehler, daher ist es unmöglich zu erraten, wie der Code aussieht, mit dem Sie wirklich arbeiten.

Nichtsdestoweniger kann die Grundidee dessen, was Sie anscheinend versuchen zu erreichen, gut funktionieren. Zum Beispiel stellt die folgenden, ohne ein Problem:

template<class T, class Key> 
class BinaryTree { 
public: 
    class Node {}; 
}; 

template <class T, class Key> 
class AVLTree : public BinaryTree<T, Key> { 
public: 
    void rotateLL(typename BinaryTree<T, Key>::Node *n); 
    // or: void rotateLL(typename AVLTree::Node *n); 
}; 
+0

Nein, tut es nicht: http://coliru.stacked-crooked.com/a/621e32915451f7ab – aschepler

+0

@aschepler: Ups - ganz richtig. (Bedient mich richtig für VC++). –

Verwandte Themen