2010-08-09 4 views
3

Possible en double:
g++ “is not a type” errorvecteur <T> :: itérateur - invalide?

Ce qui suit ne compile pas:

1 template<typename T> 
2 void foo(std::vector<T>::iterator & i) 
3 { 
4 } 

sur Visual Studio, je reçois les erreurs suivantes:

>(2) error C2065: 'i' : undeclared identifier 
>(4) warning C4346: 'std::vector<_Tp>::iterator' : dependent name is not a type 
    prefix with 'typename' to indicate a type 
>(4) error C2182: 'foo' : illegal use of type 'void' 
>(4) error C2998: 'int foo' : cannot be a template definition 
+1

trouvé ce (http://stackoverflow.com/questions/1301380/g-is-not-a-type-error) [double] , il y en a plus mais je ne peux pas les trouver. : S – GManNickG

Répondre

13

std::vector<T>::iterator est un type qui est dépendant sur un paramètre de modèle, à savoir T. , Vous devez donc préfixe avec elle typename:

template<typename T> 
void foo(typename std::vector<T>::iterator & i) 
{ 
} 

Here's an explanation.

+0

+1 Plus rapide que moi. –

+0

@Fred: Je suis maxed donc je tourne rapidement pour les réponses acceptées. : P – GManNickG

+0

Haha, je vais accepter votre réponse demain alors :) (afin que vous puissiez obtenir +15) – Jacob

Questions connexes