Help un example banale sur les template(c++)

menouni67 Messages postés 4 Date d'inscription mercredi 10 juin 2009 Statut Membre Dernière intervention 19 novembre 2010 - 8 nov. 2010 à 21:48
mustrhaz62 Messages postés 14 Date d'inscription mardi 11 août 2009 Statut Membre Dernière intervention 24 avril 2011 - 19 nov. 2010 à 13:08
Salut SVP j'arrive pas à comprendre l'erreur sur ce morceau de code (compilé en dev c++)

#include
using namespace std;

template <class T>
T min(T a,T b){
return ((a>a>>b;
cout<<min(a,b)<<endl;

system("pause");
return 0;
}


Merci...

6 réponses

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
9 nov. 2010 à 02:04
Salut,

Google est ton ami!
Regarde ce site ca va surement t'éclairer :
http://www.code-libre.org/alp/templates/tuto_templates.html

Shell
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
9 nov. 2010 à 10:53
- Évite les using namespace std, voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
- Entrer => Entrez :p
- Pas besoin de parenthèse dans le return de ton template min.

Quel est le problème ? C'est simple, lorsque tu utilises un template, c'est à dire quand tu l'appelles, il faut normalement préciser les arguments et les paramètres.
Si ta fonction template est:

template <typename T>
void toto(T pouet)
{
}

Alors il faut l'appeler comme ceci:

toto(9);
toto<double>(9.0);
toto<std::string>("kikoo");


Il faut préciser le paramètre qui correspond à l'argument !

Il y a des cas où le paramètre est déduit par le compilateur, et des cas ou il ne l'est pas.
Ex:

toto(9.0); // Cas non déduit
toto("kikoo"); // Cas déduit, le compilateur sait que c'est un toto<std::string>("kikoo");


Dans ton code, le problème venait du fait, qu'il ne savait pas si tu passais des int& ou des int.
Il faut donc lui préciser explicitement que tu veux passer des int.

Ton code devient:
#include 

template <class T>
T min(T a,T b)
{
  return (a < b) ? a : b;
}

int main()
{
  int a,b;

  std::cout << "Entrez deux entiers: " << std::endl;
  std::cin >> a >> b;
  std::cout << min(a,b) << std::endl;

  return 0;
}


________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
mustrhaz62 Messages postés 14 Date d'inscription mardi 11 août 2009 Statut Membre Dernière intervention 24 avril 2011
18 nov. 2010 à 22:40
Salut,

Ton code est correct ,il y a juste un conflit de nom. La bibliothèque standard contient aussi une fonction min, donc donne une autre nom à ta fonction pour résoudre ce problème.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
18 nov. 2010 à 23:18
@mustrhaz62: Non, ce n'est pas une solution. S'il veut appeler sa fonction min, il peut tout à fait le faire. Il suffit juste de ne pas utiliser using namespace std (et les conflits de namespace sont la raison pour laquelle on ne l'utilise pas, voir lien de mon précédent post).

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
menouni67 Messages postés 4 Date d'inscription mercredi 10 juin 2009 Statut Membre Dernière intervention 19 novembre 2010
19 nov. 2010 à 04:02
Merci pour vos réponses , problème résolu
0
mustrhaz62 Messages postés 14 Date d'inscription mardi 11 août 2009 Statut Membre Dernière intervention 24 avril 2011
19 nov. 2010 à 13:08
CptPingu: Pour moi, les deux sont des solutions. Je ne vois pas en quoi ma solution est fausse. Bref, à chacun sa méthodologie de développement.
0
Rejoignez-nous