2011-05-08 54 views
4

我有一個模板類「BinaryHeap」,它也在本身內部聲明瞭一個公共類「Item」。繼承帶有內部類的模板類並訪問繼承類中的內部類

現在我想用元素查找的散列來擴展BinaryHeap,並因此繼承它。我把它稱爲「HashedBinaryHeap」,它應該使用像BinaryHeap一樣的Item類。

存根看起來是這樣的:

template<class T> 
class BinaryHeap { 
public: 
    class Item {...}; 
    ... 
    void appendItem(const Item & item); 
    ... 
}; 

template<class T> 
class HashedBinaryHeap : public BinaryHeap<T> { 
public: 
    ... 
    void appendItem(const Item & item); 
    ... 
}; 

現在的問題是,當我嘗試訪問內HashedBinaryHeap Item類就像我在appendItem()方法做,我得到一些編譯器錯誤。

當我寫它像上面或與<牛逼>:

void appendItem(const Item & item); 
void appendItem(const Item<T> & item); 

我得到:

ISO C++ forbids declaration of 'Item' with no type 

當我做的一個:

void appendItem(const HashedBinaryHeap::Item & item); 
void appendItem(const HashedBinaryHeap<T>::Item & item); 

我得到:

expected unqualified-id before '&' token 

那麼如何'訪問'HashedBinaryHeap中的類項目?我誤解了什麼? (也許這不是模板類相關的問題,但我知道模板類混淆了很多C++初學者,我仍然不敢叫自己別的東西...請讓我出去:) )

在此先感謝!

+1

二叉堆 ::項目或類型名稱二叉堆 ::項目? – 2011-05-08 22:27:04

+0

你究竟是什麼意思?我試着把'typedef typename BinaryHeap :: Item Item'放在聲明頂部,但它沒有編譯:'typename BinaryHeap :: Item不是模板' – leemes 2011-05-08 22:34:27

+2

void appendItem(const typename BinaryHeap :: Item&item );正在爲我工​​作 – 2011-05-08 22:36:41

回答

1

好的,解決了!

void appendItem(const typename HashedBinaryHeap<T>::Item & item); 

這奏效了 - 我不知道類型名...