【发布时间】:2011-05-08 22:12:11
【问题描述】:
我有一个模板类“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 类时,我得到了一些编译器错误。
当我像上面那样或使用
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 中的类Item?我误会了什么?
(也许这不是模板类相关的问题,但我知道模板类让很多 C++ 初学者感到困惑,我仍然不敢称自己为其他东西......请让我出去。:))
提前致谢!
【问题讨论】:
-
BinaryHeap
::Item 或类型名 BinaryHeap ::Item? -
你到底是什么意思?我尝试将
typedef typename BinaryHeap<T>::Item Item放在声明顶部,但它没有编译:typename BinaryHeap<T>::Item is not a template -
void appendItem(const typename BinaryHeap
::Item & item);为我工作 -
void appendItem(const typename HashedBinaryHeap
::Item & item);也不错 -
非常感谢,成功了。
标签: c++ templates inheritance