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

Signaler
Messages postés
4
Date d'inscription
mercredi 10 juin 2009
Statut
Membre
Dernière intervention
19 novembre 2010
-
Messages postés
14
Date d'inscription
mardi 11 août 2009
Statut
Membre
Dernière intervention
24 avril 2011
-
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

Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
1
Salut,

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

Shell
Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
109
- É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
Messages postés
14
Date d'inscription
mardi 11 août 2009
Statut
Membre
Dernière intervention
24 avril 2011

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.
Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
109
@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
Messages postés
4
Date d'inscription
mercredi 10 juin 2009
Statut
Membre
Dernière intervention
19 novembre 2010

Merci pour vos réponses , problème résolu
Messages postés
14
Date d'inscription
mardi 11 août 2009
Statut
Membre
Dernière intervention
24 avril 2011

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.