Template c++

Résolu
jacinthe87 Messages postés 204 Statut Membre -  
mamiemando Messages postés 34184 Statut Modérateur -
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 34184 Statut Modérateur 7 888
 
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 204 Statut Membre 3
 
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 34184 Statut Modérateur 7 888
 
Ok mais ce n'est pas ta méthode template qui est utilisée dans ce cas, c'est celle de la STL.
0