2017-03-17 5 views
-3

Je suis très nouveau en C++, et j'ai rencontré cette erreur: error: 'size_type' does not name a type pour la ligne 2. Je ne comprends pas ce qu'il essaie de me dire. Suis-je censé mettre un autre type après size_type sur la ligne 2?C + + size_type ne nomme pas un type

template<class vecType> 
size_type len(vector<vecType> inVector) { 
    size_type vecSize = inVector.size(); 
    return vecSize; 
} 

Pour votre information: En utilisant gcc/g++ 4.9.2

+2

« nom » est un verbe dans ce cas. Cela signifie que 'size_type' n'est pas un nom de type de données. Cela signifie que vous n'avez pas dit au compilateur ce que 'size_type' est. –

+0

'size_type' est généralement attaché à une autre classe, comme' vector :: size_type' – user4581301

+0

Connexes: http://stackoverflow.com/questions/4849632/vectorintsize-type-in-c – user4581301

Répondre

1

Jetons un coup d'oeil à une fonction et non pas un modèle de fonction.

int add_two(int in) 
{ 
    return (in + 2); 
} 

Le int avant le nom de la fonction est le type de retour. Si le compilateur ne peut pas déterminer qu'il représente un type, il le signalera comme une erreur. Si vous avez eu une faute de frappe et écrit

imt add_two(int in) 
{ 
    return (in + 2); 
} 

le compilateur se plaindra que imt est pas un type.

Un modèle de fonction doit également avoir un type de retour. Vous avez:

template<class vecType> 
size_type len(vector<vecType> inVector) { 
    size_type vecSize = inVector.size(); 
    return vecSize; 
} 

Ici, vous avez size_type avant que le nom de la fonction. Si le compilateur ne peut pas déterminer que size_type est bien un type, il se plaindra. Si size_type est un type connu, le compilateur continuera avec ce type étant le type de retour de la fonction.

Vous pouvez utiliser:

template<class vecType> 
typename std::vector<vecType>::size_type len(vector<vecType> inVector) { 
    ... 
} 

pour laisser le compilateur savoir que std::vector<vecType> a un type appelé size_type et la valeur de retour de cette fonction est de ce type. Vous devrez utiliser typename std::vector<vecType>::size_type puisqu'il s'agit d'un nom de type dépendant. Voir Where and why do I have to put the "template" and "typename" keywords? pour plus sur le sujet.

De plus, vous devez corriger la déclaration de la variable vecSize dans la fonction.

template<class vecType> 
typename std::vector<vecType>::size_type len(vector<vecType> inVector) { 
    typename std::vector<vecType>::size_type vecSize = inVector.size(); 
    return vecSize; 
} 

Si vous êtes en mesure d'utiliser un compilateur C++ 11, vous pouvez simplifier la déclaration variable

auto vecSize = inVector.size(); 
-2

Essayez

vector<vecType>::size_type vecSize = inVector.size(); 
+0

Pourquoi les votes vers le bas? Ma réponse est suggérée dans deux commentaires ci-dessus et la documentation g ++. – user481779