2016-12-01 5 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++). –

Смежные вопросы