У меня есть шаблонный класс P, у которого есть const_iterator, и я пытаюсь сделать вектор указанных итераторов и перебрать этот вектор:
std::vector<typename P<A, B>::const_iterator>::const_iterator it;
проблема в том, когда я пытаюсь скомпилировать
error: expected ‘; before ‘it
любые идеи относительно того, почему это происходит?
Вам нужно typename
перед std::vector<>
потому что по крайней мере один из параметров шаблона в P<A, B>
является зависимым типом:
typename std::vector<typename P<A, B>::const_iterator>::const_iterator it;
Оба использования const_iterator
зависят от параметров шаблона; поэтому оба требуют typename
.
typename std::vector<typename P<A, B>::const_iterator>::const_iterator it;
^^^^^^^^ ^^^^^^^^
const_iterator
в P?