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 :

Surcharge opérateur C++


Sujet :

C++

  1. #1
    bm
    bm est déconnecté
    Membre confirmé

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Points : 556
    Points
    556
    Billets dans le blog
    6
    Par défaut Surcharge opérateur C++
    Bonjour ,

    Quand j'implémente dans main() :

    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
    #include <iostream>
    #include <string>
    #include "Duree.h"
     
    using namespace std;
     
    int main(){
     
        Duree duree1(0, 10, 28), duree2(0, 10, 28);
        if(duree1 == duree2)
    {
         std::cout << "Les deux durees sont egales !" << std::endl;
    }
     
        return 0;
     
    }
    ERREUR :

    ||=== Build: default in Console application (compiler: GNU GCC Compiler) ===|
    main.cpp|| référence indéfinie vers « operator==(Duree const&, Duree const&) »|
    ||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

    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
    #ifndef DUREE_H_INCLUDED
    #define DUREE_H_INCLUDED
     
    class Duree
    {
        public:
        Duree(int heures = 0, int minutes = 0, int secondes = 0);
     
        private:
        int m_heures;
        int m_minutes;
        int m_secondes;
    };
     
    bool operator==(Duree const& a, Duree const& b);
     
    #endif // DUREE_H_INCLUDED

    QUESTION : Où placer bool operator ?


  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    C'est une erreur de link.
    Tu déclares une fonction et ne l'implémentes pas.
    Il faut implémenter ton opérateur == sinon il risque pas de le trouver.. si la question est "où", peu importe tant que le linker peut le trouver.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    bm
    bm est déconnecté
    Membre confirmé

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Points : 556
    Points
    556
    Billets dans le blog
    6
    Par défaut
    if(duree1 == duree2) // implément de " == bool opérateur "

    Si j'ajoute ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    bool operator==(Duree const& a, Duree const& b)
    {
        //Teste si a.m_heure == b.m_heure etc.
        if (a.m_heures == b.m_heures && a.m_minutes == b.m_minutes && a.m_secondes == b.m_secondes)
            return true;
        else
            return false;
    }
    ||=== Build: default in Console application (compiler: GNU GCC Compiler) ===|
    main.cpp|| définitions multiples de « operator==(Duree const&, Duree const&) »|
    .objs/RPG/Duree.cpp|| défini pour la première fois ici|
    ||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

    Je vais sauter cette surcharge qui est très mal expliquée dans ce tuto de ooCLROOM



    Quoi changer dans le cpp ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include "Duree.h"
     
    Duree::Duree(int heures, int minutes, int secondes) : m_heures(heures), m_minutes(minutes), m_secondes(secondes)
     
    {
     
    }

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    A première vue, tu as la définition de l'opérateur == dans main.cpp et dans Duree.cpp.
    Faut choisir.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    *boule de crystal, Ô boule de crystal, révèle-moi l'erreur par magie*
    Tu l'aurais pas implémenté dans le header par hasard ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    bm
    bm est déconnecté
    Membre confirmé

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Points : 556
    Points
    556
    Billets dans le blog
    6
    Par défaut
    Avec les fichiers sources je vais revoir étape par étape.
    Cela double le temps et c'était pas prévu au début ..



    [Résolu]

    C'est la déclaration dans la class Duree "estEgal" que ne trouve pas
    le compilateur ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Duree
    {
        public:
     
        Duree(int heures = 0, int minutes = 0, int secondes = 0);
        bool estEgal(Duree const& b) const;  //  <---- Meuh
        ...

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

Discussions similaires

  1. Portabilitée : Surcharge opérateur de comparaison
    Par Dimitri_87 dans le forum C++
    Réponses: 11
    Dernier message: 15/12/2006, 16h14
  2. Surcharge opérateur +
    Par nunurs83 dans le forum C++
    Réponses: 6
    Dernier message: 31/10/2006, 09h48
  3. [Débutant]Surcharge opérateur +
    Par Geolem dans le forum Débuter
    Réponses: 13
    Dernier message: 05/12/2005, 10h16
  4. surcharge opérateur << et >>
    Par Azharis dans le forum Débuter
    Réponses: 11
    Dernier message: 02/11/2005, 21h22
  5. Surcharge opérateurs
    Par ghostdogpr dans le forum C++
    Réponses: 5
    Dernier message: 18/03/2005, 11h51

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