我有一个模板类“BinaryHeap”,它还在自身内部声明了一个公共(public)类“Item”。
现在我想用用于元素查找的散列扩展 BinaryHeap,因此继承了它。我将其称为“HashedBinaryHeap”,它应该使用与 BinaryHeap 相同的 Item 类。
stub 看起来像这样:
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++ 初学者感到困惑,我仍然不敢称自己为其他东西......请让我出来。:))
提前致谢!
最佳答案
好的,解决了!
void appendItem(const typename HashedBinaryHeap<T>::Item & item);
这成功了——我不知道 typename...
关于c++ - 继承一个带有内部类的模板类,并在继承类中访问内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5930711/