Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1656 connectés 

  FORUM HardWare.fr
  Programmation

  [C++] dynamic_cast

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] dynamic_cast

n°49974
sebmarley
Posté le 31-07-2001 à 16:17:25  profilanswer
 

Bonjour,
j'ai voulu utiliser dynamic_cast pour transformer un pointeur de classe mere vers une classe fille, du genre :
b = dynamic_cast<fille*>(a);
avec b derivant de a, et il plante a l'edition de liens:
undefined reference to `mere type_info function'
 
C'est normal, ou y'a un probleme de compilateur (c'est g++)?
Il faut savoir que j'ai aussi utilise un exemple de la doc C++ annotations (identique a ce que je veux faire) et il plante sur mon ordi, idem que pour mon prog:
http://www.icce.rug.nl/docs/cplusplus/cplusplus14.html (14.5.1)
 
Quelqu'un a une idee du probleme?

mood
Publicité
Posté le 31-07-2001 à 16:17:25  profilanswer
 

n°49983
Guz
Posté le 31-07-2001 à 16:27:51  profilanswer
 

sebmarley a écrit a écrit :

Bonjour,
j'ai voulu utiliser dynamic_cast pour transformer un pointeur de classe mere vers une classe fille, du genre :
b = dynamic_cast<fille*>(a);
avec b derivant de a, et il plante a l'edition de liens:
undefined reference to `mere type_info function'
 
C'est normal, ou y'a un probleme de compilateur (c'est g++)?
Il faut savoir que j'ai aussi utilise un exemple de la doc C++ annotations (identique a ce que je veux faire) et il plante sur mon ordi, idem que pour mon prog:
http://www.icce.rug.nl/docs/cplusplus/cplusplus14.html (14.5.1)
 
Quelqu'un a une idee du probleme?  




 
POurquoi tu n'ecris pas ca :
b = (classeFille*) a;
 
Et si ca passe pas tu forces comme ca :
 
b = (classeFille*)((void*) a);
 
Je sais c'est bourrin et le cast en void* doit etre banni mais mon dieu que c'est pratique parfois.

n°49985
C_Po_Ma_Fa​ute
Posté le 31-07-2001 à 16:29:51  profilanswer
 

Guz a écrit a écrit :

 
 
POurquoi tu n'ecris pas ca :
b = (classeFille*) a;
 
Et si ca passe pas tu forces comme ca :
 
b = (classeFille*)((void*) a);
 
Je sais c'est bourrin et le cast en void* doit etre banni mais mon dieu que c'est pratique parfois.  




 
mouais c pas du C++, ce genre de cast porcin :ouch:

n°49990
seblamb
Posté le 31-07-2001 à 16:42:05  profilanswer
 

Pour que dynamic_cast fonctionne il faut une fonction virtuelle dans la classe de base ( même si elle fait rien ...).

n°49992
Guz
Posté le 31-07-2001 à 16:42:18  profilanswer
 

C_Po_Ma_Faute a écrit a écrit :

 
 
mouais c pas du C++, ce genre de cast porcin :ouch:  




 
Je sais bien et j'evite mechament ce genre de trucs mais je connais pas son contexte, et si ca peut lui eviter de casser sa structure c'est peut etre une solution.

n°50036
LetoII
Le dormeur doit se réveiller
Posté le 31-07-2001 à 20:12:33  profilanswer
 

seblamb a écrit a écrit :

Pour que dynamic_cast fonctionne il faut une fonction virtuelle dans la classe de base ( même si elle fait rien ...).  




 
je veux pas parrier mais il me semble que la présence de classe virtuelles n'est pas nécessaire pour avoir recours à dynamic_cast.

n°50045
wpk
Posté le 31-07-2001 à 21:04:52  profilanswer
 

LetoII a écrit a écrit :

 
 
je veux pas parrier mais il me semble que la présence de classe virtuelles n'est pas nécessaire pour avoir recours à dynamic_cast.  




 
je crois bien que seblamb a raison, faut que le type de base soit polymorphe => au moins une methode en virtual (mets le destructeur en virtual ca peut pas faire de mal ;) ).
 
Ah oui, active aussi le support de la RTTI ca peut pas faire de mal non plus.


---------------
"Si ton labeur est dur, et si tes résultats sont minces, rappelle-toi  
n°50181
sebmarley
Posté le 01-08-2001 à 09:24:45  profilanswer
 

Merci pour toutes ces reponses!!
seblamb -> je savais deja qu'il fallait une classe virtuelle, et ca ne marche pas quand meme
Guz -> avec ce genre d'astuce bourrine, je risque pas de perdre toutes mes donnees enregistrees dans a?
 
Mais le pire c que j'ai essaye l'exemple officiel dans le site que j'ai mis au 1er message, et ca marche pas -> y'a pas quelqu'un qui pourrait tester chez lui pour voir si ca vient pas de mon environnement?

n°50184
seblamb
Posté le 01-08-2001 à 09:28:24  profilanswer
 

Par défaut certains compilateurs comme VC++ desactivent la RTTI.
Tu as vérifié ?

n°50188
sebmarley
Posté le 01-08-2001 à 09:37:48  profilanswer
 

je suis sous linux et je compile avec g++. Normalement elle est activee...

mood
Publicité
Posté le 01-08-2001 à 09:37:48  profilanswer
 

n°50192
seblamb
Posté le 01-08-2001 à 09:41:51  profilanswer
 

tu peux afficher l'example que tu utilises ?

n°50201
sebmarley
Posté le 01-08-2001 à 09:53:16  profilanswer
 

class mere {
public:
  virtual void Print();
 
};
 
class fille : public virtual mere {
public:
  int k ;
  void Print();
 
};
 
 
void fille::Print() {
  cout << "Print" << endl;
};
 
 
void main () {
  mere * a;
  fille * b;
  a = new mere;
  b = dynamic_cast<fille*>(a);
  cout << b->k << endl;
 
};
 
Voila tout le code!!! Je n'y comprends plus grand chose a cette erreur...

n°50208
seblamb
Posté le 01-08-2001 à 10:06:04  profilanswer
 

Tu ne peux pas convertir a en type fille* parce que a contient la réference sur un objet de type mere.
Ton programme est faut c'est pour ça que ça plante.

n°50229
sebmarley
Posté le 01-08-2001 à 10:30:18  profilanswer
 

Mais meme si je mets a = new fille; ca plante quand meme!!

n°50275
seblamb
Posté le 01-08-2001 à 11:57:42  profilanswer
 

Deja si dynamic_cast ne marche pas, le pointeur renvoyé est NULL. C'est tout l'intérêt de dynamic_cast, il faut tester le pointeur renvoyé.
Sinon j'ai testé. Si tu met 'a = new fille' ton programme fonctionne bien.
Et si tu met '#include<typeinfo>'

n°50280
sebmarley
Posté le 01-08-2001 à 12:05:22  profilanswer
 

donc c'est bien a cause de l'environnement, parce que moi ca plante completement a l'edition de liens!!! (et avec la rtti d'active). Merci d'avoir essayer, je sais maintenant que je dois changer d'idee si je veux terminer ce *** de prog!!

n°50454
verdoux
And I'm still waiting
Posté le 01-08-2001 à 20:24:59  profilanswer
 

Y a plein d'erreurs dans ton prog, il risque pas de compiler.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [C++] dynamic_cast

 

Sujets relatifs
Plus de sujets relatifs à : [C++] dynamic_cast


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR