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 :

error C2804: trop de paramètres pour l'opérateur binaire 'operator +'


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    aucun
    Inscrit en
    Avril 2012
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2012
    Messages : 152
    Par défaut error C2804: trop de paramètres pour l'opérateur binaire 'operator +'
    Bonjour,

    Je suis un debutant en C++. J'apprends le c++ par moi meme. Puis, c'est la premiere fois que je fais des programme oriente d'objet(POO). Je travaille avec les operator(). Il y a une erreur qui affiche qu'il a trop de paramètres pour l'opérateur binaire 'operator +'. Quelqu'un peux me dire pourquoi svp.

    Merci d'avance & passe un joyeux noel

    Temps.h
    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
    18
    19
    20
    21
    22
    23
    24
    #ifndef DEF_TEMPS
    #define DEF_TEMPS
     
    /* Creation de la classe temps qui me permettera de calculer du temps avec le temps */
    class Temps
    {
    /* Les attributs du temps */
    private:
    	int m_semaine;
    	int m_jour;
    	int m_heure;
    	int m_minute;
    	int m_seconde;
    	int m_secondeAbsolu;
     
    /* Action que le temps peut faire */
    public:
    	Temps(int heure = 0,int minute = 0, int seconde = 0);
    	void balancer();
    	int get_secondeAbsolu() const; 
    	Temps operator+(Temps const& a, Temps const& b);
    };
     
    #endif
    Temps.cpp
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    #include "Temps.h"
    #include <iostream>
    using namespace std;
     
    // Construction du temps
    Temps::Temps(int heure,int minute, int seconde)
    {
    	//Placer les parametre dans les arguments
    	m_heure = heure;
    	m_minute = minute;
    	m_seconde = seconde;
     
    	//Calculer les secondes Absolus
    	//Si l'heure(en parametre) est plus que 0
    	if(heure > 0)
    	{
    		//A chaque 1 heure(en parametre), la seconde absolu gagne 3600
    		while(heure > 0)
    		{
    			heure -= 1;
    			m_secondeAbsolu += 3600;
    		}
    	}
    	//Si la minute(en parametre) est plus grand que 0
    	if(minute > 0)
    	{
    		//A chaque 1 minute(en parametre), la seconde absolu gagne 60.
    		while(minute > 0)
    		{
    			minute -= 1;
    			m_secondeAbsolu += 60;
    		}
    	}
    	//Rajouter le nombre de seconde dans la seconde absolu
    	m_secondeAbsolu += seconde;
    	balancer();
    }
     
    void Temps::balancer()
    {
    	if(m_seconde > 60)
    	{
    		while(m_seconde > 60)
    		{
    			m_seconde -= 60;
    			m_minute += 1;
    		}
    	}
    	if(m_minute > 60)
    	{
    		while(m_minute > 60)
    		{
    			m_minute -= 60;
    			m_heure += 1;
    		}
    	}
    	if(m_heure > 24)
    	{
    		while(m_heure > 24)
    		{
    			m_heure -= 24;
    			m_jour += 1;
    		}
    	}
    	if(m_jour > 7)
    	{
    		while(m_jour > 7)
    		{
    			m_jour -= 7;
    			m_semaine += 1;
    		}
    	}
    }
     
    int Temps::get_secondeAbsolu() const
    {
    	return m_secondeAbsolu;
    }
     
    Temps operator+(Temps const& a, Temps const& b)
    {
    	int copieA(a.get_secondeAbsolu());
    	int copieB(a.get_secondeAbsolu());
    	int tempsTotal(copieA+copieB);
    	Temps total(0,0,tempsTotal);
    	return total;
    }
    main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <iostream>
    #include "Temps.h"
    using namespace std;
     
    int main()
    {
    	Temps X(23,45,56);
    	Temps Y(67,187,555);
    	system("pause");
    	return 0;
    }

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Il y a deux façons de définition un operator +.
    • En tant que membre de la classe :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      class MaClasse {
      public:
          MaClasse operator + (MaClasse const & other) const;
      };
       
      MaClasse MaClasse::operator + (MaClasse const & other) const {
          // ...
      }
      Tu remarqueras que cet operator + ne prends qu'un seul argument (other), l'autre étant additionné est l'instance de la classe this.
    • En tant que fonction indépendante :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      MaClasse operator + (MaClasse const & lhs, MaClasse const & rhs) {
          // ...
      }
      Pour ce cas où l'opérateur n'est pas membre de la classe, et donc pas de this disponible, nous avons toujours besoin de deux instances, et en passons donc deux.

    Tu remarqueras que tu as un peu mélangé les deux :
    1. D'un côté, tu as déclaré un opérateur + à l'intérieur de ta classe, mais qui prend deux arguments au lieu d'un.
    2. De l'autre côté tu as défini un operateur + indépendant de ta classe, et n'ayant rien à voir avec ton précédent : tu as oublié
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Temps Temps::operator+(Temps const& a, Temps const& b)

    Et le compilateur se plaint par rapport au 1).

    Je te conseille cette page de Wikipédia qui résume assez bien les différentes formes de surcharges.

  3. #3
    Membre très actif
    Homme Profil pro
    aucun
    Inscrit en
    Avril 2012
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2012
    Messages : 152
    Par défaut
    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. hashtable pour éviter trop de paramètres à une fonction ?
    Par _LittleFlea_ dans le forum Général Java
    Réponses: 6
    Dernier message: 14/08/2009, 17h24
  2. Trop de paramètres pour moi avec des "Si" partout
    Par michparmentier dans le forum Excel
    Réponses: 3
    Dernier message: 13/11/2008, 06h59
  3. paramètres pour une fonction
    Par bul dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 28/05/2005, 07h49
  4. Réponses: 7
    Dernier message: 10/02/2005, 13h44
  5. Réponses: 3
    Dernier message: 21/05/2003, 11h44

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