2013-09-03 2 views
0

Je n'arrive pas à comprendre pourquoi g ++ continue de se plaindre de l'iter?Utilisation du type générique avec std :: initializer_list

vector.cpp: 42: 8: Erreur: « typename » nécessaire avant « std :: initializer_list < _TP> :: iterator

Voici le code:

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; 
} 

Amitiés

+0

Bien sûr, étant donné que 'initializer_list' est une fonctionnalité C++ 11, vous devriez aussi pouvoir utiliser une boucle for-range ou au moins déclarer' iter' avec 'auto'. –

Répondre

1

Vous devez indiquer au compilateur que std::initializer_list<T>::iterator est un type, car il peut également être membre. Puisque T n'est pas connu du compilateur dans cette fonction, les deux possibilités conduisent à des ambiguïtés.

+0

En effet, votre droite! merci –

1

Il doit être typename std::initializer_list<T>::iterator car le compilateur ne peut pas dire si l'itérateur est membre ou un type.

+0

Votre effet correct, merci beaucoup! –

Questions connexes