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 :

heritage et dynamic_cast


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2007
    Messages : 15
    Par défaut heritage et dynamic_cast
    Bonjour,

    J'ai une class abstraite Term et une autre class XTerm qui derive de Term. dans la Term je veux surcharger l'operateur de comparaison "<" et pour ca je veux faire :

    friend bool operator<(Term& term1,Term& term2){
    if((dynamic_cast<XTerm&>(term1)) != NULL && (dynamic_cast<XTerm&>(term2)) != NULL){
    ...comparer les attributs de XTerm
    }
    }

    Mais ca c'est pas possible car la class XTerm e definie apres la Term..Qu'est-ce que je peux pour que la conversion marche?

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Par défaut
    note :

    si tu fais

    dynamic_cast<XXX>(YYY) != NULL, il faut que XXX soit un pointeur et non une reference ... sinon ca fait une exception (bad_cast je crois ou quelquechose comme ca)

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    XTerm * a = dynamic_cast<XTerm *>(&term1);
     
    XTerm * b = dynamic_cast<XTerm *>(&term2);
     
    if ((a != NULL) && (b != NULL)){
     
    }
    note : si possible , utilise des references et des pointeurs constants

  4. #4
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2007
    Messages : 15
    Par défaut
    je comprends que tu dis mais je recois la meme erreur..

    Erreur 1 error C2680: 'XTerm *'*: type de cible non valide pour dynamic_cast

    Le probleme c'est qu'il ne sait pas que XTerm c'est enfant de Term..parce que je definis XTerm apres le Term.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Par défaut
    dans ce cas, il faut faire une declaration de XTerm (prototype comme pour une fonction)

    note : pas besoin de preciser l arborescence de classe pour dynamique cast

  6. #6
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2007
    Messages : 15
    Par défaut
    J'ai la meme erreur...

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

Discussions similaires

  1. Heritage multiple et dynamic_cast
    Par hpfx dans le forum Débuter
    Réponses: 5
    Dernier message: 04/02/2009, 22h26
  2. [Kylix] heritage multiple et interfaces :(
    Par le_barbu dans le forum EDI
    Réponses: 4
    Dernier message: 26/01/2004, 19h30
  3. [Postgres] Pb d'heritage...
    Par anonia dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 23/08/2003, 22h34
  4. [HERITAGE] Redondance ou pas redondance ???
    Par cyrillus76 dans le forum Schéma
    Réponses: 1
    Dernier message: 11/06/2003, 09h46
  5. [PostgreSQL] Question vis a vis de l'heritage...
    Par Gandalf dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 12/05/2003, 16h53

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