【问题标题】:Inherit a template class with an inner class and access the inner class within the inherited class用内部类继承模板类,并在继承的类中访问内部类
【发布时间】: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&lt;T&gt;::Item Item 放在声明顶部,但它没有编译:typename BinaryHeap&lt;T&gt;::Item is not a template
  • void appendItem(const typename BinaryHeap::Item & item);为我工作
  • void appendItem(const typename HashedBinaryHeap::Item & item);也不错
  • 非常感谢,成功了。

标签: c++ templates inheritance


【解决方案1】:

好的,解决了!

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

这成功了——我不知道 typename...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多