2010-10-14 4 views
0

partie pertinente du fichier .h:fonction de modèle avec retour de modèle de type en C++

template<class T, class W> 
T inputValidate(T input, W minVal, W maxVal); 

partie pertinente du fichier .cpp:

T inputValidate(T input, W minVal, W maxVal) 
{ 
    if (input < minVal || input > maxVal) 
    { 
    cout << "Invalid input! Try again: "; 
    cin input; 
    } 

return input; 
} 

Je reçois une erreur de « erreur: ' T » ne désigne pas un type »

+6

Il y a une bonne chance que votre prochaine question sera quelque chose le long des lignes de « comment ça se fait que je reçois une erreur de référence non définie quand j'inclure cet en-tête et d'essayer d'utiliser cette modèle dans un autre fichier source? " Pour répondre de manière préventive, [vous devez presque toujours mettre la définition du modèle dans le fichier d'en-tête.] (Http://www.parashift.com/c++-faq-lite/templates.html#faq-35.12). –

+1

@James: Vous l'avez appelé, bien qu'il apparaisse comme un commentaire à une réponse, pas une nouvelle question. –

Répondre

3

Vous devez répéter la déclaration de modèle avant la définition de votre fonction:

template<class T, class W> 
T inputValidate(T input, W minVal, W maxVal) 
{ 
    ... 
} 
+0

maintenant je reçois: référence non définie à 'short inputValidate (short, int, int) – user450632

+0

lire le commentaire de James à votre question –

+0

Je ne sais pas ce que James 'Link dit. Je ne comprends pas ce que je devrais faire. – user450632

1

Vous devez définir la fonction:

template <class T, class W> T inputValidate(T input, W minVal, W maxVal) { 

} 
+1

Je ne sais pas ce que James 'Link dit. Je ne comprends pas ce que je devrais faire. – user450632

+0

@ user450632: Il existe d'autres fichiers dans lesquels vous incluez le fichier d'en-tête ci-dessus en utilisant #include "validate.h" ou quelque chose de similaire. Au lieu de cela, utilisez #include "validate.cpp". – Anand

Questions connexes