2016-09-29 7 views
5

バイナリツリー検索に基づいてを設定しようとしています。を設定しています。だから、ルート(ノードへのポインタ)から始まるこのセットを構築しています。ここでは、Nodeは値を持ち、右と左の子(両方ともノードへのポインタ)です。このようにして、ルートノードの右側に新しいノードを設定することができました。定義を見てみましょう:私は、このエラーに関連する記事をたくさん見てきたが、それらのほとんどは書き込みによって引き起こされたオブジェクトの型名を指定していません - C++

/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 { 
^ 

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 
} 

は、だから私はこのエラーを抱えていますその定義の前に実装を実装します。ご覧のとおり、fatherOfNodeの実装はその定義よりも下にあるので、私のケースではないようです。

何が起こっているか考えてみましょうか?このクラスの外であなたがこの問題を解決する必要があるので、

+2

'Set :: Node'にする必要があります。 –

+0

質問には何が間違っていますか?私は、私が十分に具体的かつ明確であったと思う。私は何が間違っているのか教えてください。私は将来それを繰り返さないでしょうか? – jscherman

答えて

4

Nodeは、Set内部クラスです:

Set<T>::Node 

だからあなたの関数定義をする必要があります。

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私は 'typename'なしでこれを試しました。ありがとう! – jscherman