2015-04-04 58 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

究竟是什麼編譯器錯誤? – 2015-04-04 08:15:01

+0

它說AVLNodePointer不會命名一個類型 – Tony 2015-04-04 08:25:16

回答

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關鍵字。

在模板聲明或定義中使用的名稱,這是 依賴於模板的參數被假定不命名類型除非 適用的名稱查找找到類型名或名稱由合格 關鍵字類型名稱。

+0

它的工作原理。謝謝。但我不明白爲什麼我們需要包含typename? – Tony 2015-04-04 08:51:38

+0

請參閱這篇文章瞭解相同的語法如何表示兩種不同的內容。 'typename'用於通過說明下面的內容應該被視爲一種類型來消除歧義。 – 2015-04-04 09:15:23

+0

你應該給你的答案添加一些解釋。 – 2015-04-04 13:17:47