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 :

impossible de convertir un pointeur 'this' de 'const MyNote' en 'MyNote &'


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2008
    Messages : 354
    Points : 139
    Points
    139
    Par défaut impossible de convertir un pointeur 'this' de 'const MyNote' en 'MyNote &'
    Bonjour,
    J'ai construit une classe c++ MyClass.
    J'ai ajouté une méthode à cette classe MyMethod( const MyNote &).
    Avec MyNote une autre Classe.
    Le problème est que lorsque je compile le message d'erreur suivant apparait
    error C2662: 'MyNote::getNote'*: impossible de convertir un pointeur 'this' de 'const MyNote' en 'MyNote &'
    La classe MyNote est la suivante:*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class MyNote
    {
    public:
    MyNote();
    double getNote(){return note;}
    private:
    double note;
    }

  2. #2
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    Bonjour,

    Je pense que tu essaies d'utiliser getNote sur un const Note&, mets getNote en const et ca devrait marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class MyNote
    {
      public:
        MyNote();
        double getNote() const {return note;}
      private:
        double note;
    };
    Renseigne tout sur la constance en C++, la respecter est un avantage.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 49
    Points : 20
    Points
    20
    Par défaut
    D'ailleurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double getNote() {return note;}
    En lisant de droite à gauche, je me suis dit « Tiens, un accesseur qui retourne une variable encaspulée, pas de const : il doit retourner une référence (ce qui est mal). Oh tiens, un retour par valeur. »

    Respecter l'immuabilité en C++ est quelque chose d'important et de crucial. Ca te permet de savoir comment va se comporter une fonction, et ça te permet, dans le cas des struct/class, d'assurer qu'une fonction n'aura pas le droit d'écrire à l'aide de this.

    Le problème avec ta fonction, c'est que comme elle n'est pas immuable, le compilateur considère qu'elle est capable de modifier le pointeur this de la classe. Or, tu demandes après une référence sur un objet immuable (qui ne peut donc pas être modifié). Ainsi, tout appel à ta fonction est interdit, car le compilateur sait que cette fonction peut modifier l'objet.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/05/2011, 11h57
  2. Réponses: 3
    Dernier message: 18/06/2009, 19h30
  3. Réponses: 1
    Dernier message: 28/03/2009, 19h23
  4. Réponses: 5
    Dernier message: 05/09/2008, 18h26
  5. Réponses: 1
    Dernier message: 10/08/2007, 12h57

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