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 :

problème avec const correctness


Sujet :

C++

  1. #1
    Membre du Club Avatar de donkeyquote
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 195
    Points : 52
    Points
    52
    Par défaut problème avec const correctness
    Bonjour à tous !
    Est-ce quelqu'un peut me dire pourquoi je trouve le message d'erreur :
    "error: passing ‘const CompositeProduct’ as ‘this’ argument of ‘virtual double CompositeProduct::getPrice()’ discards qualifiers".
    L'erreur se produit sur la sentence suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::cout<<"###"<<iComposite.getPrice()<<"###"<<std::endl;
    La declaration de la fonction getPrice() est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Public:
    virtual double CompositeProduct::getPrice();
    Comment je peut le corriger ?

    Merci d'avance de votre aide !

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Points : 444
    Points
    444
    Par défaut
    Salut,

    C'est simplement un problème de const. Ton paramètre iComposite est déclaré comme tel, mais tu appelles une fonction non const dessus, donc susceptible de le modifier.

    Si ta fonction getPrice ne modifie pas l'instance sur laquelle elle est appelée, tu devrais la déclarer de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    virtual double CompositeProduct::getPrice() const;
    Sinon il faut que tu enlèves le const devant la déclaration de iComposite.

  3. #3
    Membre du Club Avatar de donkeyquote
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 195
    Points : 52
    Points
    52
    Par défaut
    Le problème c'est que je ne peux pas le mettre come const parce que ma fonction getPrice() modifie un atribut de sa classe...

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Points : 444
    Points
    444
    Par défaut
    Lis la dernière phrase de mon post

    Et un getter qui modifie un attribut de classe ne porte pas vraiment bien son nom :p

  5. #5
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Un getter qui modifie un attribut.... ben voyons....
    A moins que ce ne soit un cache ? (genre on cache un accès couteux à une DB ou un site web pour calculer le prix), mais dans ce cas, l'attribut modifié est transient. Et le mot clef ad-hoc en C++ est mutable, et la fonction peut rester constante.

    Dans tous les cas, Toto.getXXXX() ne devrait jamais modifier Toto, jamais !

    Si ce n'est pas le cas... alors oui... c'est normal, tu ne PEUX pas appeler getPrice() sur un objet constant

    Je suis un fourbe... je corrige inline

  6. #6
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    s/volatile/mutable/

Discussions similaires

  1. [W-02] problème avec correction automatique
    Par Montjoie dans le forum Word
    Réponses: 9
    Dernier message: 16/01/2009, 23h38
  2. Problème avec fonction const
    Par oodini dans le forum SL & STL
    Réponses: 2
    Dernier message: 26/11/2008, 16h24
  3. Réponses: 17
    Dernier message: 03/06/2008, 13h19
  4. Problèmes avec const ?
    Par oodini dans le forum C++
    Réponses: 11
    Dernier message: 16/02/2007, 15h48
  5. problème avec const char * et #define macro
    Par CodeurNé dans le forum C
    Réponses: 5
    Dernier message: 20/09/2006, 21h25

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