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 :

Souci avec const


Sujet :

C++

  1. #1
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Par défaut Souci avec const
    Salut,

    J'ai voulu écrire ce 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
     
    // header
    class ClasseExterne;
    class MaClasse
    {
    protected;
    ClasseExterne* _prtClasseExterne;
     
    public:
    void setClasseExterne(const ClasseExterne* ptrExt);
    };
     
    // source
    MaClasse::setClasseExterne(const ClasseExterne* ptrExt)
    {
    _ptrClasseExterne = ptrExt;
    }
    J'utilise le "const" pour signifier que la méthode setClasseExterne ne modifie ni ptrExt ni ce qu'il pointe mais apparemment ça signifie plus que ça puisque l'affectation est interdite (erreur à la compil). Quelle est la bonne façon de faire ?

    Merci

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Tu ne peux copier un pointeur const vers un pointeur non-const.

    Tu dois donc soit stocker un pointeur const dans ta classe, soit stocker (un pointeur vers) une copie de l'objet passé en paramètre.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    ne signifie pas que le pointeur est constant, mais que l'objet pointé l'est. Dans ton cas, il serait inutile d'essayer de passer un pointeur constant puisqu'il est de toute façon passé par valeur.

  4. #4
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Par défaut
    Citation Envoyé par zais_ethael
    ne signifie pas que le pointeur est constant, mais que l'objet pointé l'est. Dans ton cas, il serait inutile d'essayer de passer un pointeur constant puisqu'il est de toute façon passé par valeur.
    C'est exactement ce que je veux exprimer en priorité : "l'objet pointé est constant" . Mais si j'ai bien compris on ne peut pas limiter cette contrainte au contexte d'exécution de la méthode... autrement dit le fait de mettre const à un argument de méthode impose que l'argument passé soit lui même un const et d'autre part que si cet argument est affecté il soit affecté à un const... Donc en conclusion la seule façon de faire ce que je veux est de supprimer purement et simplement le "const".

    J'ai bon ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Par défaut
    si tu veux que la méthode ne change pas ta valeur, tu n'as qu'à le passer par valeur et non par pointeur. comme ca tu récupères une copie avec sa valeur initiale. Et lorsque tu quittes ta méthode tu ne changes rien à la valeur que t'as passé par valeur.


    Si tu veux manger travaille dans ta cuisine, si tu veux une femme travaille dans ta chambre,... Et où il faut que je travaille si je veux un job ?

  6. #6
    doccpu
    Invité(e)
    Par défaut
    Citation Envoyé par tnarol
    ... autrement dit le fait de mettre const à un argument de méthode impose que l'argument passé soit lui même un const et d'autre part que si cet argument est affecté il soit affecté à un const... Donc en conclusion la seule façon de faire ce que je veux est de supprimer purement et simplement le "const".

    J'ai bon ?
    non ! tu peux metre n'importe quoi lorsque tu apelle ta methode, variable ou constante.
    oui en viran le const devant TON pointeur ta methode fonctionnera.

Discussions similaires

  1. quelques soucis avec word 2000
    Par ramchou dans le forum Word
    Réponses: 3
    Dernier message: 06/09/2004, 18h13
  2. SOucis avec une reequete imbriquee
    Par Ni4k dans le forum Langage SQL
    Réponses: 6
    Dernier message: 30/03/2004, 08h56
  3. souci avec un algorithme
    Par slider16 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 22/03/2004, 17h17
  4. [DEBUTANT] petits soucis avec un prgm de chat
    Par LechucK dans le forum MFC
    Réponses: 8
    Dernier message: 19/01/2004, 16h52
  5. Réponses: 4
    Dernier message: 16/02/2003, 12h16

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