IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Problème avec les templates (patrons)


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 63
    Par défaut Problème avec les templates (patrons)
    Salut tous,

    Bon voilà je fais un passage sur les patrons de classes en C++, je me dis qu'il faut avoir une vision générale de la chose et en savoir plus sur les patrons de fonctions, là je tombe sur un exemple qui est supposé m'apprendre le syntaxe, mais ça marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    template <class T> T min (T a, T b)
    { if (a < b) return a ; // ou return a < b ? a : b ;
    else return b ;
    }
     
     
    int main()
    {
        int n=4, p=12 ;
    float x=2.5, y=3.25 ;
    cout << "min (n, p) = " << min (n, p) << "\n" ; // int min(int, int)
    cout << "min (x, y) = " << min (x, y) << "\n" ; // float min (float, float)
     
        return 0;
    }
    Erreur d'overload (surdéfinition), mais n'est ce pas justement le but ? Merci d'office pour vos réponses

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Je ne vois qu'un problème dans ton code : La fonction min existe déjà dans la bibliothèque standard. Donc pour peu que, par l'intermédiaire d'un #include, même indirect, elle soit définie, et que tu aies mis un #using namespace std;, tu vas avoir une ambiguïté entre ta fonction et celle du standard.

    Voici par exemple le message que retourne le compilateur online de Comeau (le rouge est de moi) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    "ComeauTest.c", line 14: error: more than one instance of overloaded function "min"
              matches the argument list, the choices that match are:
                function template "T min(T, T)"
                function template "const _Tp &std::min(const _Tp &, const _Tp &)"
                The argument types that you used are: (int, int)
      cout << "min (n, p) = " << min (n, p) << "\n" ; // int min(int, int)
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 63
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Je ne vois qu'un problème dans ton code : La fonction min existe déjà dans la bibliothèque standard. Donc pour peu que, par l'intermédiaire d'un #include, même indirect, elle soit définie, et que tu aies mis un #using namespace std;, tu vas avoir une ambiguïté entre ta fonction et celle du standard.

    Voici par exemple le message que retourne le compilateur online de Comeau (le rouge est de moi) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    "ComeauTest.c", line 14: error: more than one instance of overloaded function "min"
              matches the argument list, the choices that match are:
                function template "T min(T, T)"
                function template "const _Tp &std::min(const _Tp &, const _Tp &)"
                The argument types that you used are: (int, int)
      cout << "min (n, p) = " << min (n, p) << "\n" ; // int min(int, int)
    J'ai changé le nom de la fonction et ça marche, merci bien !

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Citation Envoyé par bounadalvidal Voir le message
    J'ai changé le nom de la fonction et ça marche, merci bien !
    D'une certaine façon, la bonne réponse aurait plutôt été :
    J'ai supprimé le using namespace std; et ça marche, merci bien !

Discussions similaires

  1. problème avec les template c++
    Par lenas_tshaleb dans le forum C++
    Réponses: 4
    Dernier message: 17/03/2015, 17h58
  2. Problème avec les templates.
    Par mondaying dans le forum C++
    Réponses: 5
    Dernier message: 08/03/2011, 19h03
  3. [Xtext] Problème avec les templates pour les mots clé
    Par P1t0u dans le forum Eclipse Platform
    Réponses: 0
    Dernier message: 10/06/2010, 15h53
  4. Problème avec les templates de class
    Par _SamSoft_ dans le forum C++
    Réponses: 8
    Dernier message: 21/08/2008, 10h30
  5. Problème avec les templates
    Par F-fisher dans le forum C++
    Réponses: 7
    Dernier message: 28/06/2008, 16h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo