Унаследуйте класс шаблона с внутренним классом и получите доступ к внутреннему классу в унаследованном классе - PullRequest
4 голосов
/ 09 мая 2011

У меня есть шаблонный класс "BinaryHeap", который также объявляет открытый класс "Item" внутри себя.

Теперь я хочу расширить BinaryHeap хешем для поиска элемента и, следовательно, унаследовать его.Я назвал его «HashedBinaryHeap», который должен использовать тот же класс Item, что и BinaryHeap.

Заглушка выглядит так:

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, как и в методе 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

Так как же я могу «получить доступ» к классу Item в HashedBinaryHeap?Что я неправильно понимаю?

(Может быть, это не та проблема, связанная с классами шаблонов, но я знаю, что классы шаблонов сбивают с толку многих начинающих C ++, и я все еще не смею называть себя чем-то другим ...Пожалуйста, вытащите меня. :))

Заранее спасибо!

1 Ответ

1 голос
/ 09 мая 2011

Хорошо, решил это!

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

Это помогло - я не знал о typename ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...