Невозможно перебрать список шаблонов C ++ - PullRequest
0 голосов
/ 01 ноября 2011

Я новичок в использовании шаблонов в C ++ и пытаюсь выполнить итерацию по списку шаблонов.

Вот мой код

template <typename T>
void pleaseWork(const list<T>& aList, list<T>& list1, list<T>& list2) 
{
typename list<T>::iterator i;
int n = 0;
for(i = aList.begin(); i != aList.end(); ++i) {
         //Do something crazy
         n++;
}

}

int main()
{
    list<int> lista;
    list<int> list1;
    list<int> list2;
    for (int i = 0; i < 10; i++) {
        lista.push_back(i*2);
    }

    pleaseWork(lista, list1, list2);

return 0; 
}

Когда я компилирую, я получаюследующая ошибка: ошибка: нет совпадения для 'operator =' в i = ((const std::list<int, std::allocator<int> >*)aList)->std::list<_Tp, _Alloc>::begin с _Tp = int, _Alloc = std :: allocator '

Спасибо за вашу помощь

Ответы [ 2 ]

1 голос
/ 01 ноября 2011

aList является ссылкой на const, поэтому begin() вернет const_iterator.

Используйте auto, если ваш компилятор поддерживает это.

0 голосов
/ 01 ноября 2011

Поскольку вы передаете pleaseWork ссылку на список const, вам необходимо использовать const_iterator для доступа к его содержимому.

...