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 :

const - non const


Sujet :

C++

  1. #1
    Membre émérite
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Par défaut const - non const
    Bonjour,

    J'ai un petit soucis de C++...

    Ma classe hérite d'une classe abstraite. Certaines méthodes sont donc obligatoirement const. Dans ces méthodes je souhaite apeller une méthode private à moi... seulement cette derniere ne passe pas car elle n'est pas const, et donc le compilo refuse.

    Je ne peux pas passer ma méthode en const elle fait au moins 200 lignes ça sera trop pénible ...

    Y'a t il une feinte ? une idée ?

    Merci.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    Ma classe hérite d'une classe abstraite. Certaines méthodes sont donc obligatoirement const.
    hein? pourquoi?

  3. #3
    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
    @nikko34 : Sans doute possède-t-elle des méthodes virtuelles const que Ange_blond veut redéfinir...

    @Ange_blond : Si ta méthode peut être const, alors elle doit l'être, je ne vois pas trop d'autre solution. De plus, quand une méthode fait 200 lignes, c'est souvent un signe qu'elle devrait être fragmentée un peu...
    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.

  4. #4
    Membre émérite
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Par défaut
    Heuu faut partir du principe que c'est comme ça.
    C'est du code déjà existant, je cherche juste à faire un test et donc je ne vais pas réécrire tout le code juste pour tester ça...

    Si je ne les met pas en const :

    Error : impossible d'instancier une classe abstraite
    osgGA::MatrixManipulator::getInverseMatrix(void) const' : est abstrait

    (sachant que ma classe herite de osgGA::MatrixManipulator)

    donc pas tellement le choix... retour au probleme original...

  5. #5
    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
    Au pire, la solution la plus sale est de faire de la méthode const un wrapper qui fait un const_cast sur this pour appeler la méthode non-const, mais c'est vraiment dégueu...
    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.

  6. #6
    Membre émérite
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Au pire, la solution la plus sale est de faire de la méthode const un wrapper qui fait un const_cast sur this pour appeler la méthode non-const, mais c'est vraiment dégueu...


    ce n'est que pour tester un effet... et voir si oui ou non une modif pourrait changer qqch... donc dans tous les cas ça sera retravaillé proprement par la suite... donc je susi preneur des trucs meme pas nets...

    Comment je peux faire ça Médinoc ?

  7. #7
    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
    Code C++ sale : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    TypeDeRetour TaClasse::getInverseMatrix(void) const
    {
    	return const_cast<TaClasse*>(this)->getInverseMatrix();
    }
     
    //Ta fonction de 200 lignes
    TypeDeRetour TaClasse::getInverseMatrix(void)
    {
    }
    Mais je rappelle, c'est vraiment sale. La seule chose plus sale que ça aurait été d'utiliser un cast C-style au lieu du const_cast.
    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.

  8. #8
    Membre émérite
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Par défaut
    ca compile.

    Merci bien, et désolé pour t'avoir fait sortir un code comme celui ci ^^

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    ta méthode, elle ne peut pas être const non plus?

    et si tu as des attributs private à toi, tu peux aussi les mettre "mutable" pour qu'ils puissent être modifiés par des méthodes consts.

  10. #10
    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
    Citation Envoyé par nikko34 Voir le message
    et si tu as des attributs private à toi, tu peux aussi les mettre "mutable" pour qu'ils puissent être modifiés par des méthodes consts.
    Mais à part pour des caches, des compteurs de références ou des compteurs d'appels, c'est généralement une mauvaise idée.
    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.

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

Discussions similaires

  1. multi_index_container et non const
    Par mister3957 dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 27/10/2013, 14h51
  2. Réponses: 27
    Dernier message: 16/05/2009, 14h53
  3. Hack const --> non const ?
    Par befalimpertinent dans le forum C++
    Réponses: 15
    Dernier message: 06/03/2008, 15h11
  4. Réponses: 7
    Dernier message: 30/08/2007, 14h17
  5. Réponses: 18
    Dernier message: 19/10/2006, 12h02

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