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 :

erreur avec l'utilisation dynamic_cast


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 118
    Points : 68
    Points
    68
    Par défaut erreur avec l'utilisation dynamic_cast
    Bonsoir,

    J'ai 3 Classes A ,B et C (A et B Heritent de C ).

    J'ai ecris dans la classe B :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class A; // pour indiquer qu'il existe une classe A
    Voila !
    dans le core de la classe B , je veux utiliser un pointeur sur A !

    J'ai declarer (dans B.cc):

    Et sachant que j'ai dans B un pointeur sur C :
    Je veux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    a  = dynamic_cast<a *> ( c );
    J'obtient l'erreur suivante :

    cannot dynamic_cast «c» (of type «class C*») to type «struct A*» (target is not pointer or reference to complete type)


    Merci d'avance .

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 118
    Points : 68
    Points
    68
    Par défaut
    Citation Envoyé par Hello_World Voir le message
    Bonsoir,

    J'ai 3 Classes A ,B et C (A et B Heritent de C ).

    J'ai ecris dans la classe B :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class A; // pour indiquer qu'il existe une classe A
    Voila !
    dans le core de la classe B , je veux utiliser un pointeur sur A !

    J'ai declarer (dans B.cc):

    Et sachant que j'ai dans B un pointeur sur C :
    Je veux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    a  = dynamic_cast<a *> ( c );
    J'obtient l'erreur suivante :

    cannot dynamic_cast «c» (of type «class C*») to type «struct A*» (target is not pointer or reference to complete type)


    Merci d'avance .

    J'ai reglé ce problème !
    J'ai remplacé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    a  = dynamic_cast<a *> ( c );
    par :
    A ce stade , pas d'erreur , mais si j'ajoute à mon code ,par exemple,
    j'obtient les erreurs suivantes :
    invalid use of incomplete type «struct A»
    forward declaration of «struct A»

    Je ne comprend pas pourquoi il voit la classe A comme struct et pas comme classe

    Merci d'avance .

  3. #3
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Juillet 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2004
    Messages : 289
    Points : 635
    Points
    635
    Par défaut
    Bon alors déjà (même si je ne suis pas le mieux placé pour filer des tuyaux sur les bonnes méthodes à utiliser ), remplacer le dynamic_cast par un (...*) c'est juste cacher la misère. D'un côté ton compilo t'informe que tu déraille, de l'autre côté il dit rien mais il n'attend qu'un geste de ta part pour dérailler donc préfère le dynamic_cast.

    Ensuite le dynamic_cast marche avec la notion d'héritage : si ta classe B hérite de A, et que C hérite de B, alors C aura les méthodes de A et tu peux les appeler sans cast ... toi dans ton cas comme B a un pointeur sur A, et C un pointeur sur B, tu veux faire du C->getB()->getA()->methode_de_A(), tu n'as pas besoin de caster quoi que ce soit.

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par Hello_World Voir le message
    J'ai remplacé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    a  = dynamic_cast<a *> ( c );
    par :
    Boulette
    La preuve :
    Citation Envoyé par Hello_World Voir le message
    A ce stade , pas d'erreur , mais si j'ajoute à mon code ,par exemple,
    j'obtient les erreurs suivantes :
    invalid use of incomplete type «struct A»
    forward declaration of «struct A»
    Une règle de base : ne pas cacher un avertissement que l'on ne comprend pas ...

    Citation Envoyé par Hello_World Voir le message
    J'ai ecris dans la classe B :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class A; // pour indiquer qu'il existe une classe A
    Ca, c'est dans B.h si A est utilisée dans la déclaration de class B.
    Mais dans B.cpp si tu dois utilisé A, alors il faut include "A.h" pour que le compilateur sache ce que c'est.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 118
    Points : 68
    Points
    68
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Boulette

    Ca, c'est dans B.h si A est utilisée dans la déclaration de class B.
    Mais dans B.cpp si tu dois utilisé A, alors il faut include "A.h" pour que le compilateur sache ce que c'est.
    C'est résolu avec cette réponse !
    Merci infiniment .

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/05/2008, 17h35
  2. Réponses: 3
    Dernier message: 26/06/2007, 12h50
  3. Erreur: avec l'utilisation de template<int N>
    Par vincho dans le forum C++
    Réponses: 8
    Dernier message: 22/02/2007, 19h07
  4. Erreur avec GetImageSize : utilisation d'une URL
    Par Are-no dans le forum Langage
    Réponses: 4
    Dernier message: 14/02/2007, 23h41
  5. Retour d'erreur avec l'utilisation de la commande For en VBS
    Par genialk2000 dans le forum VBScript
    Réponses: 3
    Dernier message: 30/03/2005, 18h45

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