C ++ - итератор для вектора не компилируемых итераторов

0

У меня есть шаблонный класс P, у которого есть const_iterator, и я пытаюсь сделать вектор указанных итераторов и перебрать этот вектор:

std::vector<typename P<A, B>::const_iterator>::const_iterator it;

проблема в том, когда я пытаюсь скомпилировать

error: expected ‘; before ‘it

любые идеи относительно того, почему это происходит?

  • 1
    Можете ли вы вставить typedef const_iterator в P?
  • 0
    Я не могу = (но я гарантирую, что это работает.
Теги:
templates
iterator
stdvector

2 ответа

2
Лучший ответ

Вам нужно typename перед std::vector<> потому что по крайней мере один из параметров шаблона в P<A, B> является зависимым типом:

typename std::vector<typename P<A, B>::const_iterator>::const_iterator it;
1

Оба использования const_iterator зависят от параметров шаблона; поэтому оба требуют typename.

typename std::vector<typename P<A, B>::const_iterator>::const_iterator it;
^^^^^^^^             ^^^^^^^^

Ещё вопросы

Сообщество Overcoder
Наверх
Меню