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 erreur compilation


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 382
    Par défaut surcharge opérateur erreur compilation
    Bonjour j'aimerais faire la surcharge des opérateur += etc... et j'ai un problème.
    Voilà mon code :

    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
     
    #ifndef POINT_H
        #define POINT_H
     
        #ifndef POINT_DEBUG
            #define POINT_DEBUG 1
        #endif
     
    #include <iostream>
    using namespace std ;
     
    class Point {
     
        public:
     
            // CONSTRUSTREUR
            Point();
            Point(Point&);
            Point(int,int);
     
             // DESTRUSTREUR
            ~Point();
     
            Point &operator+=(const Point&);
     
            void setX(int);
            void setY(int);
     
            int getX();
            int getY();
     
        private :
            int *x;
            int *y;
    };
     
    #endif
    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
     
    #include "point.h"
     
    Point::Point() {
        x = new int; y = new int;
        *x = 0 ; *y = 0 ;
        if( POINT_DEBUG )
            cout << "Appel du constructeur Point(). x=" << *x << " y=" << *y
                 << " &x=" << x << " &y=" << y << endl ;
    }
     
    Point::Point(int a, int b) {
        x = new int; y = new int ;
        *x = a ; *y = b;
        if( POINT_DEBUG )
            cout << "Appel du constructeur Point(int,int). x=" << *x << " y=" << *y
                 << " &x= " << x << " &y=" << y << endl ;
    }
     
    Point::Point(Point &copy) {
        x = new int; y = new int ;
        *x = copy.getX(); ; *y = copy.getY() ;
        if( POINT_DEBUG )
            cout << "Appel du constructeur Point(Point&). x=" << *x << " y=" << *y
                 << " &x= " << x << " &y=" << y << endl ;
    }
     
    Point::~Point() {
        if( POINT_DEBUG )
            cout << "Appel du destructeur ~Point()" << endl ;
        delete x,y ;
    }
     
    void Point::setX(int a) {
        *x = a;
        if( POINT_DEBUG )
            cout << "Appel de la fonction setX(int). x=" << *x << endl ;
    }
     
    void Point::setY(int b) {
        *y = b;
        if( POINT_DEBUG )
            cout << "Appel de la fonction setX(int). y=" << *y << endl ;
    }
     
    Point& Point::operator+=(const Point &point) {
        *x = point.getX();
        *y = point.getY();
        return *this;
    }
     
    int Point::getX() {
            return *x;
    }
     
    int Point::getY() {
            return *y;
    }
    Quand je compile, j'ai cette erreur :
    point.cpp:46: error: passing `const Point' as `this' argument of `int Point::getX()' discards qualifiers
    point.cpp:47: error: passing `const Point' as `this' argument of `int Point::getY()' discards qualifiers

    merci de votre aide

  2. #2
    Membre expérimenté
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Par défaut
    Salut,

    getX() et getY() ne sont pas const

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            int getX() const;
            int getY() const;
    Le constructeur de copie n'a pas de raison d'être autre chose que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Point(const Point&);
    et quelle étrange idée d'utiliser des new.... et ainsi introduire des bugs.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 382
    Par défaut
    pourquoi ne faut-il pas utiliser de new ?

  4. #4
    Membre expérimenté
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Par défaut
    Parce tu sais à l'avance de combien tu en as besoin (un seul).
    Donc plutôt déclarer ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Point {
         public:
    [...]
        private :
            int x;
            int y;
    };
    D'autre part, le ne fait probablement pas ce que tu crois...

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 382
    Par défaut
    new c'est bien pour réserver un espace mémoire,
    et delete pour lui dire de viré de la mémoire les variables ?

  6. #6
    Membre expérimenté
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Par défaut
    etsont très différents. Le second est parenthesé ainsi :
    et (x, y) retourne juste y. Donc seul y sera libéré.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 382
    Par défaut
    D'accord merci.
    Donc new et delete servent quand nous ne savons pas combien d'instance vont exister en mémoire ?
    Sinon, ca ne sert à rien..

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ca sert aussi si on veut allouer une variable qui doit continuer d'exister après la portée courante.

    Mais ne t'embête pas trop avec ça pour l'instant, tu n'as absolument pas besoin d'allocations dynamiques pour ta classe Point.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 382
    Par défaut
    Ok merci...

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

Discussions similaires

  1. Erreur compilation - surcharge opérateur
    Par lg_53 dans le forum C++
    Réponses: 18
    Dernier message: 23/03/2015, 11h18
  2. Erreur de segmentation surcharge opérateur []
    Par Nicoclem dans le forum C++
    Réponses: 3
    Dernier message: 17/04/2008, 18h05
  3. Surcharge d'opérateur : erreur de linkage
    Par tHE_fLAmMinG_mOE dans le forum C++
    Réponses: 6
    Dernier message: 31/10/2006, 17h04
  4. Trop de message d'erreurs: compilation KO
    Par jeannot27 dans le forum C++Builder
    Réponses: 6
    Dernier message: 21/01/2004, 16h45
  5. Erreur compilation DX8.1 VC++ 6
    Par d.vidal dans le forum DirectX
    Réponses: 1
    Dernier message: 10/09/2003, 09h04

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