我有一个模板类“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);
...
};
现在的问题是,当我尝试像在appendItem()
方法中那样访问HashedBinaryHeap中的Item类时,我遇到了一些编译器错误。
当我像上面这样写或用&lt; T&gt;:
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 ++初学者感到困惑,我仍然不敢称自己为别的东西......请让我出去。:))
提前致谢!
答案 0 :(得分:1)
好的,解决了!
void appendItem(const typename HashedBinaryHeap<T>::Item & item);
这就是诀窍 - 我不知道typename ......