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++初學者,我仍然不敢叫自己別的東西...請讓我出去:) )
在此先感謝!
二叉堆 ::項目或類型名稱二叉堆 ::項目? –
2011-05-08 22:27:04
你究竟是什麼意思?我試着把'typedef typename BinaryHeap :: Item Item'放在聲明頂部,但它沒有編譯:'typename BinaryHeap :: Item不是模板' –
leemes
2011-05-08 22:34:27
void appendItem(const typename BinaryHeap :: Item&item );正在爲我工作 –
2011-05-08 22:36:41