2014-10-12 2 views
0

Вот мой код:C++ ошибка: «Итератор не является типом»

template <typename container_type> 
void transfer(container_type container, iterator begin, iterator end) { 
    for (; begin != end; begin++) 
     if (!element_in_container(container, *begin)) 
      container.insert(iterator, *begin); 
} 

Я получаю ошибку 'iterator is not a type'.

Я попытался добавить std:: или container_type:: до iterator, не помогло. Я попытался определить шаблон как template <typename container_type<typename T> > и итераторы как container_type<T>::iterator, не повезло. Что не так?

+4

Как насчет 'typename container_type :: iterator'? –

+1

Действительно, 'iterator' не является типом. –

+0

Возможный дубликат: [Где и почему мне нужно поставить ключевые слова «template» и «typename»?] (Http://stackoverflow.com/questions/610245/where-and-why-do-i-have- to-put-the-template-and-typename-keywords) –

ответ

4

Я думаю, что вы имеете в виду следующее

template <typename container_type> 
void transfer(container_type container, typename container_type::iterator begin, 
             typename container_type::iterator end) { 

Примите во внимание, что в любом случае ваша функция не так, потому что после вставки элемента в контейнере итераторы могут быть недействительными.

1

I tried adding std:: or container_type:: before iterator, didn't help.

container_type::iterator является зависимым именем, поэтому вам нужно typename ключевого слова, прежде чем рассматривать его как тип (typename container_type::iterator). Это подробно объясняется here.

Смежные вопросы