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

 


Dernière réponse
Sujet : [C++] dynamic_cast
verdoux Y a plein d'erreurs dans ton prog, il risque pas de compiler.

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
verdoux Y a plein d'erreurs dans ton prog, il risque pas de compiler.
sebmarley 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!!
seblamb 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>'
sebmarley Mais meme si je mets a = new fille; ca plante quand meme!!
seblamb 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.
sebmarley 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...
seblamb tu peux afficher l'example que tu utilises ?
sebmarley je suis sous linux et je compile avec g++. Normalement elle est activee...
seblamb Par défaut certains compilateurs comme VC++ desactivent la RTTI.
Tu as vérifié ?
sebmarley 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?
wpk

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.

LetoII

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.

Guz

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.

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

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:

Guz

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.

sebmarley 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?

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)