Partage
  • Partager sur Facebook
  • Partager sur Twitter

operator+ détecte 3 paramètres quand il en a 2

Sujet résolu
    26 mars 2012 à 17:07:25

    Bonjour,

    Je suis actuellement au chapitre sur la surcharge d'opérateurs du tuto de C++. J'ai créé, comme indiqué au début du tutoriel, l'opérateur +. Pour ce faire, dans un fichier Duree.h, j'ai fais ceci (code parfaitement identique à celui qui est dans le site du zéro) :

    Duree operator+ (Duree const& a, Duree const& b);
    


    Et là, voici l'erreur qu'Xcode (je suis sous mac je sais pas si ça a une importance) me signale :

    "overloaded operator+ must be a unary or binary operator (has 3 parameters)"

    Je ne comprends pas... Je lui donne 2 paramètres il me répond "tu m'as donné 3 paramètres j'en veux 2"... Je lui ai pas du tout donné 3 paramètres ! o_O

    Au cas où vous en auriez besoin (mais je suis pas sur que ce soit utile), voici la totalité de mon fichier (j'ai pas inclus iostream ni rien mais c'est normal : j'ai inclus, dans main.cpp, ce fichier juste en dessous des autres includes) :

    #ifndef surcharge_operateurs_Duree_h
    #define surcharge_operateurs_Duree_h
    
    class Duree
    {
        public :
        Duree(int heures = 0, int minutes = 0, int secondes = 0);
        int getHeures() const;
        int getMinutes() const;
        int getSecondes() const;
        void setHeures(int heures);
        void setMinutes(int minutes);
        void setSecondes(int secondes);
        void normaliser ();
        Duree operator+ (Duree const& a, Duree const& b);
        
        private :
        int m_heures;
        int m_minutes;
        int m_secondes;
    };
    
    #endif
    


    Quelqu'un aurait une idée d'où provient l'erreur SVP ? Car j'ai bien suivis le cours de mathieu nebra à la lettre je comprends pas...

    En vous remerciant d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      26 mars 2012 à 17:11:04

      La fonction n'est pas libre mais membre.
      Elle a donc un paramètre implicite supplémentaire (le this).
      Sors la de la définition de la classe.
      • Partager sur Facebook
      • Partager sur Twitter
      C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
        26 mars 2012 à 17:26:49

        Je viens d'écrire tout le code nécessaire pour tester le résultat, et en effet, en faisant comme ceci :

        #ifndef surcharge_operateurs_Duree_h
        #define surcharge_operateurs_Duree_h
        
        class Duree
        {
            public :
            Duree(int heures = 0, int minutes = 0, int secondes = 0);
            int getHeures() const;
            int getMinutes() const;
            int getSecondes() const;
            void setHeures(int heures);
            void setMinutes(int minutes);
            void setSecondes(int secondes);
            void normaliser ();
            
            private :
            int m_heures;
            int m_minutes;
            int m_secondes;
        };
        
        Duree operator+ (Duree const& a, Duree const& b);
        
        #endif
        


        Ca marche.

        Merci beaucoup à toi ! ;)
        • Partager sur Facebook
        • Partager sur Twitter
          1 juin 2023 à 22:01:42

          lmghs a écrit:

          La fonction n'est pas libre mais membre.
          Elle a donc un paramètre implicite supplémentaire (le this).
          Sors la de la définition de la classe.

          j'ai pas compris le pour quoi de le faire sortir?

          Merci!

          • Partager sur Facebook
          • Partager sur Twitter
            1 juin 2023 à 23:01:02

            AimanManchoutEssalama a écrit:

            lmghs a écrit:

            La fonction n'est pas libre mais membre.
            Elle a donc un paramètre implicite supplémentaire (le this).
            Sors la de la définition de la classe.

            j'ai pas compris le pour quoi de le faire sortir?

            Merci!

            Parce que si on la met dans la définition de la classe (et non statique), c'est une fonction membre (une méthode)

            • que l'on applique à une Duree ( = *this)
            • à qui donne en paramétre deux Durees ( d1 et d2)
            • ce qui nous en fait 1 + 2 = trois.
            • et qui en retourne une autre, qui est la somme de qui et qui ?
            Et ça ne serait pas raisonnable.
            Ce qui pourrait l'être, c'est une fonction membre
            • que l'on applique à une durée
            • à qui on donne UNE durée d en paramètre
            • et retourne la somme de *this et d
            Comme ça ne modifie ni l'une ni l'autre, ça serait déclaré dans la classe Durée avec const
            class Duree 
            {
            public:
                Duree operator+(const Duree &d) const;
            
            };
             

            -
            Edité par michelbillaud 1 juin 2023 à 23:19:05

            • Partager sur Facebook
            • Partager sur Twitter

            operator+ détecte 3 paramètres quand il en a 2

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown