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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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é.

+ 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