Template c++

Résolu/Fermé
jacinthe87 Messages postés 194 Date d'inscription mercredi 4 février 2009 Statut Membre Dernière intervention 15 juillet 2010 - 30 mai 2009 à 17:46
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 31 mai 2009 à 03:27
Bonjour,

mon probleme est simple est malgré cela j'ai pas trouvé l'erreur:
voila mon code:
#include <cstdlib>
#include <iostream>

using namespace std;

   
   template <class T>
   T max(T a,T b){
        if(a>b)
        return a;
        else
        return b;
   
        }
int main()
{
    int z=3,r=9;
    cout<<"Le max est : "<<max(z,r)<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}


et voila l'arreur:
call of overloaded `max(int&, int&)' is ambiguous 
  T max(T, T) [with T = int] 
  const _Tp& std::max(const _Tp&, const _Tp&) [with _Tp = int] 


merci pour votre aide
A voir également:

3 réponses

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
30 mai 2009 à 20:37
C'est normal la fonction std::max(int,int) est définie dans la STL. Or avec le using namespace std, le compilateur ne sait pas s'il doit appeler ta fonction template ou celle de la STL. Il faut donc soit virer le using namespace std; soit trouver un autre nom.

De plus ta fonction devrait idéalement manipuler des références pour être plus efficace car la tu perds en efficacité à faire une recopie des paramètres a et b + une pour le return. Si le type T est "grand" c'est autant de temps de perdu.
template <typename T>
inline const T & max(const T & a,const T & b){
  return a > b ? a : b;
}

Bonne chance
2
jacinthe87 Messages postés 194 Date d'inscription mercredi 4 février 2009 Statut Membre Dernière intervention 15 juillet 2010 3
30 mai 2009 à 21:41
voila j'ai juste ajouter std::
cout<<"Le max est : "<<std::max(x,y)<<endl;

et ça marche!
Merci à vous
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
31 mai 2009 à 03:27
Ok mais ce n'est pas ta méthode template qui est utilisée dans ce cas, c'est celle de la STL.
0