2016-09-29 2 views
5

Ich versuche, ein Set basierend auf einem Binary Tree Search zu implementieren. Also baue ich dieses Set von root (Zeiger auf Knoten), wo Knoten einen Wert, rechts und links Kind (beide Zeiger auf Knoten auch). Auf diese Weise könnte ich einen neuen Knoten auf der rechten Seite des Wurzelknotens setzen, indem ich root-> right auf den erzeugten Knoten zeige und so weiter. Werfen Sie einen Blick auf die Definitionen:Objekt nennt keinen Typ - C++

template <class T> 
class Set 
{ 
    public: 
     Set(); 
     ~Set(); 
     void push(const T&); 
     bool belongs(const T&) const; 
     void remove(const T&); 
     const T& min() const; 
     const T& max() const; 
     unsigned int cardinal() const; 
     void show(std::ostream&) const; 

     friend ostream& operator<<(ostream& os, const Set<T> &c) { 
      c.show(os); 
      return os; 
     } 

    private: 

     struct Node 
     { 
      Node(const T& v); 
      T value; 
      Node* left; 
      Node* right; 
     }; 

     Node* root_; 
     int cardinal_; 

    Node & fatherOfNode(const Node & root, const T & key, const bool hook) const; 

}; 

... 

// This function is the one with errors. 
template <class T> 
Node & Set<T>::fatherOfNode(const Node & root, const T & key, const bool hook) const { 
    // Some code 
} 

So habe ich diese Fehlermeldung:

/home/jscherman/ClionProjects/algo2-t3-bts/set.hpp:247:1: error: ‘Node’ does not name a type 
Node & Set<T>::fatherOfNode(const Node & root, const T & key, const bool hook) const { 
^ 

Ich habe viele Beiträge mit diesem Fehler gesehen, aber die meisten von ihnen wurden durch Schreiben verursacht Funktionen Implementierungen vor seinen Definitionen. Wie Sie sehen können, liegt die Implementierung von vaterOfNode unter seiner Definition, also scheint es nicht mein Fall zu sein.

Irgendeine Idee über das, was vor sich geht?

+2

Es sollte 'Set :: Node' sein. –

+0

Was ist falsch an der Frage? Ich denke, dass ich genau und klar genug war. Können Sie mir sagen, was ich falsch gemacht habe, damit ich es in Zukunft nicht wiederholen werde? – jscherman

Antwort

4

Node ist eine interne Klasse in Set, so außerhalb dieser Klasse Sie dies mit lösen müssen:

Set<T>::Node 

So müssen, um Ihre Funktionsdefinition sein wird:

template <class T> 
typename Set<T>::Node & Set<T>::fatherOfNode(const Set<T>::Node & root, const T & key, const bool hook) const { 

Here it is, working.

+0

Ohhhh ich habe das ohne den 'typename' versucht. Vielen Dank! – jscherman