Salut,
J'ai deux classes qui s'appelle Category et Component qui héritent toutes les deux de la classe AbstractCat.
Je créé des objets Category et Component.
Plus loin dans le programme je les récupère sous forme de d'objets AbstractCat et j'aimerais donc les caster pour effectuer des opérations différentes selon que les objets sont des Category ou des Component.
Le problème est que mon dynamic_cast fait freezer le programme. Si je le termine, le debugger pointe dans le fichier dbgheap.c dans le malloc de la fonction : "_CRTIMP void * __cdecl malloc".
Et j'ai le message d'erreur suivant :
Unhandled exception at 0x77e738b2 in GetInfo.exe: Microsoft C++ exception: __non_rtti_object @ 0x0012f010.
Si je fais un dynamic_cast d'une Category vers une AbstractCat ca passe, mais pas l'inverse
Exemple de code qui ne marche pas:
Code :
- AbstractCat *abs = new AbstractCat("test" );
- if(Category *comp = dynamic_cast<Category*>(abs))
- CEditCtrl.SetWindowText("Category" );
- else
- CEditCtrl.SetWindowText("Other" );
|
Par contre ca, ca marche :
Code :
- Category *cat = new Category("test" );
- if(AbstractCat *comp = dynamic_cast<AbstractCat*>(cat))
- CEditCtrl.SetWindowText("AbstractCat" ); //ca passe forcément ici
- else
- CEditCtrl.SetWindowText("Other" );
|
En fait c'est le downcast qui ne passe pas, mais pourquoi?
Message édité par AsTro le 15-06-2005 à 14:02:58