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 :

pb accès méthode mère unique, héritage multiple


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Points : 69
    Points
    69
    Par défaut pb accès méthode mère unique, héritage multiple
    Bonjour,

    tout est presque dans le titre :
    J'ai disons 5 classes :
    class A;
    class B;
    class C;
    class D : public A, B;
    class E : public D, C;

    aucun recouvrement d'attribut; classe A,B,C distincte au possible
    recouvrement de qq méthodes (mais pas celles qui provoquent les erreurs de compilation!)

    A possède disons, une méthode "appel()"
    A.appel(); //ça marche
    D.appel(); //ça marche
    E.appel(); //ça marche pas!!

    appel(), n'est défini nul part aiilleurs que dans A!

    QQ1 pourrait-il m'expliquer?!

  2. #2
    Provisoirement toléré
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Points : 495
    Points
    495
    Par défaut
    Code reproduisant le problème?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Points : 69
    Points
    69
    Par défaut
    ...Y'en a pour bcp de fichier! Tu ne peux pas imaginer avec ce que j'ai détaillé? C'est vraiment un problème d'héritage multiple. (et j'ai pas envie si possible de passer en virtual parce qu'il faudrait réécrire TOUTES les méthodes héritées à chaque fois)

    Encore un détail, il n'y a que des int et float en attribut... donc pas de pb de pointeur envisageable.

    Si par contre, tu veux un truc précis... je peux donner!

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Si tu pouvais préciser ta plate-forme, ton compilateur, et l'erreur exacte qu'il te sort...
    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.

  5. #5
    Provisoirement toléré
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Points : 495
    Points
    495
    Par défaut
    Citation Envoyé par DEVfan Voir le message
    ...Y'en a pour bcp de fichier!
    Je me doute!

    Il faut essayer d'extraire le contexte pertinent, parfois c'est le plus difficile (et même, aussi difficile que de trouver la solution!).

    Citation Envoyé par DEVfan Voir le message
    Tu ne peux pas imaginer avec ce que j'ai détaillé?
    Là, vraiment, je ne vois pas.

    Citation Envoyé par DEVfan Voir le message
    C'est vraiment un problème d'héritage multiple. (et j'ai pas envie si possible de passer en virtual parce qu'il faudrait réécrire TOUTES les méthodes héritées à chaque fois)
    Comprends pas.

    Citation Envoyé par DEVfan Voir le message
    Si par contre, tu veux un truc précis... je peux donner!
    Pour commencer, ça aiderai que tu donnes le message d'erreur.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Points : 69
    Points
    69
    Par défaut
    Ah oui!! Pardon

    linux + Code::Blocks avec gcc

    erreur :
    erreur dans A.h : void A::appel() const" is inaccessible
    erreur dans main.cpp : à l'intérieur du contexte
    erreur dans main.cpp : «A" is not an accessible base of «E"

    ...oui appel() c'est
    void appel() const; ...méthode de A

  7. #7
    Provisoirement toléré
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Points : 495
    Points
    495
    Par défaut
    Citation Envoyé par DEVfan Voir le message
    erreur :
    erreur dans A.h : void A::appel() const" is inaccessible
    erreur dans main.cpp : à l'intérieur du contexte
    erreur dans main.cpp : «A" is not an accessible base of «E"
    Donc ce n'est pas un problème d'ambigüité.

    Peux-tu copier les déclarations d'héritage de D et de E?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Points : 69
    Points
    69
    Par défaut
    euh, ok. J'suis pas sûr de comprendre exactement ce que tu veux mais en gros, ça donne ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class E : public D,C
    {
     //private
     public :
     
     E():D(),C()
       {}
     E(D& brt, C& dhl):D(brt),C(dhl)
       {}
     
    };
    ...ya pas grand chose d'autre!

    C'est bien ça que tu voulais?

  9. #9
    Provisoirement toléré
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Points : 495
    Points
    495
    Par défaut
    Citation Envoyé par DEVfan Voir le message
    euh, ok. J'suis pas sûr de comprendre exactement ce que tu veux
    Pareil, mais pour la classe D aussi.

    Citation Envoyé par DEVfan Voir le message
    mais en gros, ça donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class E : public D,C
    {
     //private
     public :
     
     E():D(),C()
       {}
     E(D& brt, C& dhl):D(brt),C(dhl)
       {}
     
    };
    ...ya pas grand chose d'autre!

    C'est bien ça que tu voulais?
    Entre autres.

    E hérites en privé de C, c'est voulu?

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Points : 69
    Points
    69
    Par défaut
    ...merci... vous venez de répondre au problème : je pensais que "public A,B" était équivalent à "public A, public B" ... du coup, effectivement, l'accès est plus facile!

    Merci!

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 21/05/2014, 14h17
  2. Héritage multiple, surcharge de méthodes, etc
    Par Stnaire dans le forum jQuery
    Réponses: 0
    Dernier message: 04/03/2012, 00h25
  3. Réponses: 6
    Dernier message: 26/10/2010, 11h33
  4. utilisez vous l'héritage multiple ?
    Par vodosiossbaas dans le forum C++
    Réponses: 8
    Dernier message: 13/06/2005, 20h25
  5. [XML Schemas]héritage multiple
    Par nicolas_jf dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 10/06/2003, 12h55

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