2016-12-01 49 views
0

私は例継承されたクラスはネストされたクラスを継承しますか?

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

と今私は例えば、クラスから継承したいために、テンプレートクラスを持っている:

class AVLTree : public Binary Tree 

私は動けなくなる問題は、関数が私がしたいということですAVLTreeで実装するとノードを認識しません。たとえば、関数はコンパイラが言う

void rotateLL(node* n) 

なりましょう:

node has not been declared 

どのように私はこの問題を解決することができますか?

+0

申し訳ありません、私はここで尋ねています。私はその質問を編集した。 –

+0

あなたは非常に重要な詳細が不足しています。 'AVLTree'もテンプレートクラスですか? – AnT

答えて

0

nodeそれはテンプレートパラメータに依存し、基本クラスのメンバーなので、依存名と呼ばれるものです。あなたが必要です:

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

あなたは命の恩人です! –

0

あなたが実行しているものを推測するのは難しいです。問題のコードにかなりの数のタイプミスがあります。実際に作業しているコードがどのように見えるかを推測することは不可能です。

しかし、明らかに達成しようとしていることの基本的な考え方はうまくいく可能性があります。例えば、以下は問題なくコンパイルされます。

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

いいえ:http://coliru.stacked-crooked.com/a/621e32915451f7ab – aschepler

+0

@aschepler:まあまあ。 (VC++を信頼するために私に奉仕します)。 –

関連する問題