Как использовать typedef с unordered_map :: const_iterator? - PullRequest
1 голос
/ 14 апреля 2020

У меня есть класс, который использует unordered_map контейнер и пользовательские шаблоны.

template <typename KeyType, typename ValueType>
class List {
}

В этом классе я определил новый unordered_map::const_iterator с typedef следующим образом:

typename typedef std::unordered_map<KeyType, ValueType>::const_iterator ListIterator;

Обратите внимание, что я создал этот тип, чтобы использовать его в качестве параметра функции следующим образом:

void Remove(List<KeyType, ValueType>::ListIterator from, List<KeyType, ValueType>::ListIterator to) {}

Проблема в том, что при компиляции Error C2061 syntax error: identifier 'ListIterator'.
возникает ошибка. Почему возникает эта ошибка, что не так в моем typedef?

1 Ответ

4 голосов
/ 14 апреля 2020

У вас порядок typename и typedef в обратном порядке. Измените объявление на

typedef typename std::unordered_map<KeyType, ValueType>::const_iterator ListIterator;

или примените using (начиная с C ++ 11), что выглядит более четко.

using ListIterator = typename std::unordered_map<KeyType, ValueType>::const_iterator;
...