2015-04-04 2 views
-2
template<typename DataType> 
class AVLTree 
{ 
    public: 

    private: 
     class AVLNode 
     { 
     public: 
      DataType data; 
      int balanceFactor; 
      AVLNode *left; 
      AVLNode *right; 
      AVLNode():balanceFactor(0),left(NULL),right(NULL){} 
      AVLNode(DataType item):balanceFactor(0), data(item),left(NULL), right(NULL){} 
     }; 
     typedef AVLNode* AVLNodePointer; 
     AVLNodePointer root; 
     int height(AVLTree<DataType>::AVLNodePointer temp); 
     int different(AVLTree<DataType>::AVLNodePointer temp); 
     AVLNodePointer ll_rotation(AVLTree<DataType>::AVLNodePointer parent); 

}; 

template<typename DataType> 
AVLNodePointer AVLTree<DataType>:: ll_rotation(AVLTree<DataType>::AVLNodePointer parent) 
{ 
} 

но это объявление дает ошибку компилятора. Как я могу объявить эту функцию вне класса? Просто изменить некоторую опечатку, но все еще есть ошибкиКак я могу получить доступ к функции в частном классе?

+0

Какова ошибка компилятора? –

+0

Говорят, что AVLNodePointer не называет тип – Tony

ответ

0
template<typename DataType> 
typename AVLTree<DataType>::AVLNodePointer AVLTree<DataType>::ll_rotation(AVLTree<DataType>::AVLNodePointer parent) 
{ 
} 

Тип AVLNodePointer определяется только в AVLTree<DataType> классе, так что требуется префикс.

Тип AVLTree<DataType>::AVLNodePointer называется «зависимым именем», поскольку он зависит от экземпляра класса AVLTree<DataType>.

Section 14.6 стандарта C++ требует использования ключевого слова typename каждый раз, когда используется зависимое имя.

имя, используемое в объявлении шаблона или определения, и это зависит от шаблона-параметра предполагается не называть тип, если применимое поиск имени не находит имя типа или имя квалифицируется самая ключевое слово typename.

+0

Он работает. Спасибо. Но я не понимаю, почему мы должны включать typename? – Tony

+0

См. Статью , поскольку тот же синтаксис может означать две разные вещи. 'typename' используется для устранения неоднозначности их, говоря, что следует следовать за типом. –

+0

Вы должны добавить некоторые пояснения к своему ответу. –

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