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 :

problème dynamic_cast


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 85
    Points : 55
    Points
    55
    Par défaut problème dynamic_cast
    Bonjour,

    J'ai un problème avec un dynamic_cast:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Plate *plate = dynamic_cast<Plate*>(itsStruc);
    ERREUR:longeron.cc:101: error: cannot dynamic_cast `itsStruc' (of type `struct Struc* ') to type `struct Plate*' (target is not pointer or reference to complete type)
    Qu'est ce qui pê la cause de cette erreur??

    Merci,
    Xavier

    et voila l'architecture classe de base classe dérivée:

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    class Struc {
     
    	public:
    		int _numberOf_TL;
    		int _numberOf_LL;
    		int _maxNumberOf_TL;
    		int _maxNumberOf_LL;
    		Longeron* _pLongitudinalLongeron;
    		Longeron* _pTransversalLongeron;
    	public:
    		Struc();
    		~Struc();
    		void setnumberOf_TL(int i);
    		void setnumberOf_LL(int i);
    		void setmaxNumberOf_TL(int i);
    		void setmaxNumberOf_LL(int i);
    		int getnumberOf_TL();
    		int getnumberOf_LL();
    		int getmaxNumberOf_TL();
    		int getmaxNumberOf_LL();
    		void setLongitudinalLongeron(Longeron& p);
    		Longeron* getLongitudinalLongeron();
    		void setTransversalLongeron(Longeron& p);
    		Longeron* getTransversal();
    		virtual void computeMaxNumberOfStiffeners();
    		void load();
    		virtual void setdimension();
    };
     
    class Plate : public Struc {
     
    	private:
    		double _length;
    		double _width;
    	public:
    		Plate(void);
    		Plate(double a, double b);
    		void setLength(double f);
    		void setWidth(double f);
    		double getLength();
    		double getWidth();
    		void computeMaxNumberOfStiffeners();
    		void setdimension();
    };

    [Balises CODE rajoutées par Loulou24, merci d'y penser à l'avenir]

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Lorsqu'un message d'erreur parle de "complete type", c'est presque à coup sûr qu'à l'endroit de l'erreur tu n'as pas inclus l'en-tête qui déclare la classe en question.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 85
    Points : 55
    Points
    55
    Par défaut
    résolu avec un:
    Plate *plate = (Plate*) itsStruc;
    ca passe à la compilation et je dois coder qqs trucs encore avant de pouvoir lancer mais normalement ca devrait passer aussi à l'éxécution!
    merci

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 85
    Points : 55
    Points
    55
    Par défaut
    et j'avais fais un
    class Plate;
    class Struc;
    en en-tête du fichier .h correspondant au .cc où se trouvait mon dynamic_cast;

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Citation Envoyé par mencaglia
    résolu avec un:
    Plate *plate = (Plate*) itsStruc;
    ca passe à la compilation et je dois coder qqs trucs encore avant de pouvoir lancer mais normalement ca devrait passer aussi à l'éxécution!
    merci
    Beurk... Et puis ça m'étonnerait que ça fonctionne mieux à l'execution. L'avantage de dynamic_cast c'est qu'il te le dit dès la compilation.

    et j'avais fais un
    class Plate;
    class Struc;
    en en-tête du fichier .h correspondant au .cc où se trouvait mon dynamic_cast;
    C'est ce que je disais : classes déclarées mais non définies (dynamic_cast a besoin de la définition complète de la classe). Ajoute l'inclusion du bon en-tête et ça fonctionnera.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 85
    Points : 55
    Points
    55
    Par défaut
    ok merci, tu avais raison

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

Discussions similaires

  1. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  2. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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