2013-09-03 2 views
0

Я не могу понять, почему g ++ продолжает жаловаться на iter?Использование общего типа с std :: initializer_list

vector.cpp: 42: 8: ошибка: «имяТипа» необходимо до «станд :: initializer_list < _Tp> :: итератор

Это код:

template<typename T> 
Vector<T>& Vector<T>::operator=(std::initializer_list<T> list) 
{ 
    if (list.size() > 0) 
    { 
     clear(); 

     for(std::initializer_list<T>::iterator iter = list.begin(); 
      iter != list.end(); iter++) 
     { 
      push_back(*iter); 
     } 
    } 

    return *this; 
} 

Сердечные приветы

+0

Конечно, учитывая, что 'initializer_list' является функцией C++ 11, вы также можете использовать цикл for-range или, по крайней мере, объявлять' iter' с 'auto'. –

ответ

1

Вам необходимо указать компилятору, что std::initializer_list<T>::iterator является типом, так как он также может быть членом. Поскольку T не известен компилятору в этой функции, обе возможности приводят к двусмысленности.

+0

Действительно, ваше право! спасибо –

1

IT должен быть typename std::initializer_list<T>::iterator, потому что компилятор не может определить, является ли итератор членом или типом.

+0

Ты действительно прав, большое спасибо! –

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