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 dynamic_cast


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 85
    Par défaut PB dynamic_cast
    pb le dynamic_cast ne marche pas,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	Struc *struc = new Struc();
    	Plate *plate = dynamic_cast<Plate*> (struc);
    	if ( plate!=NULL ) {
    		string dimensions = "dimensions.dat";
    		plate->setdimension(dimensions);
    	}
    et la definition de mes classes est :
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    class Struc {
     
    	public:
    		int _numberOf_TL;
    		int _numberOf_LL;
    		int _maxNumberOf_TL;
    		int _maxNumberOf_LL;
    		int _typeOf_LL;
    		int _typeOf_TL;
    		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 settypeOfLL(int i);
    		void settypeOfTL(int i);
    		int gettypeOfLL();
    		int gettypeOfTL();
    		void setLongitudinalLongeron(Longeron& p);
    		Longeron* getLongitudinalLongeron();
    		void setTransversalLongeron(Longeron& p);
    		Longeron* getTransversalLongeron();
    		virtual void computeMaxNumberOfLongitudinalStiffeners();
    		virtual void computeMaxNumberOfTransversalStiffeners();
    		void load();
    		virtual void setdimension(string dim);
    };
     
    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 computeMaxNumberOfLongitudinalStiffeners();
    		void computeMaxNumberOfTransversalStiffeners();
    		void setdimension(string dim);
    };
    merci
    xavier

  2. #2
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    1 - Quel est le problème ? Tu as un pointeur NULL, ou ton code lance une exception ?

    2 - Tu crées une instance de la classe mère et tu la transtypes sous la forme d'une classe fille. C'est totalement déconseillé, évidemment, puisque l'interface de la classe mère est par définition un sous-ensemble de celle de la classe fille.

    Un exemple normal d'utilisation de dynamic_cast est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class A {...};
    class B : public A {...};
     
    A* ptr = new B();
    [...]
    B* ptr2 = dynamic_cast< B* >( ptr );

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 85
    Par défaut
    ben, j'ai un pointeur null qui m'est renvoyé et du coup je ne peux rien faire avec,

    2/ je sais que c'est déconseillé mais j'ai un objet struc qui peut être soit une plaque soit un cylindre et je le sais qu'à l'éxécution , donc je suis bien obligé???

    Xavier

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 85
    Par défaut
    ok merci c'est moi qui est fumé la moquette j'ai déjà fait ca et je sais pas pq j'ai fait cette erreur , je fais faire une factory pour créer l'objet voulu à l'éxécution

    bonne journée,

Discussions similaires

  1. [Débutant] question sur dynamic_cast
    Par Higestromm dans le forum C++
    Réponses: 4
    Dernier message: 18/05/2006, 16h26
  2. opérateur dynamic_cast
    Par b4u dans le forum C++
    Réponses: 11
    Dernier message: 23/04/2006, 06h40
  3. problème dynamic_cast
    Par mencaglia dans le forum C++
    Réponses: 5
    Dernier message: 15/03/2006, 14h28
  4. Dynamic_cast & Base class virtuelle
    Par taron dans le forum C++
    Réponses: 5
    Dernier message: 11/02/2006, 20h45
  5. Precisions sur le dynamic_cast de la FAQ
    Par Klaim dans le forum C++
    Réponses: 3
    Dernier message: 09/02/2006, 00h18

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