Problème de cast en c++ [Résolu]

Signaler
Messages postés
3
Date d'inscription
jeudi 25 décembre 2003
Statut
Membre
Dernière intervention
17 décembre 2007
-
Messages postés
3
Date d'inscription
jeudi 25 décembre 2003
Statut
Membre
Dernière intervention
17 décembre 2007
-
Bonjour, je coince sur un problème depuis hier soir 20h... (avec une nuit de dodo entre-temps)
J'ai fait un bon nombre de recherche sur le net, sans trouver la réponse à mon problème.

1: J'utilise Visual studio 2005 (je suis obligé, c'est pour un projet)

2: Voici la partie de code qui pose problème:

Figure  fig = _listeDeFigures.getIeme(choix);
GroupeFigure grp = static_cast<GroupeFigure>(fig);

GroupeFigure hérite de Figure
_listeDeFigures.getIeme(choix) renvoie une Figure, qui peut être un Carre, un Cercle, ou pour mon exemple un GroupeFigure

Dans mon cas, je sais que _listeDeFigures.getIeme() va renvoyer un GroupeFigure, mais qui a été enregistré dans la liste sous forme de Figure.

Le cast me donne cette erreur :
error C2440: 'static_cast' : cannot convert from 'Figure' to 'GroupeFigure'

J'ai essayé avec les autres types de cast, même avec le reinterpret_cast (considéré comme étant le plus dangereux à utiliser), mais l'erreur est toujours là..

Si vous pouvez m'aider à résoudre mon problème, je vous en serai grandement reconnaissant :)

5 réponses

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
"Figure  fig = _listeDeFigures.getIeme(choix);"
=> C'est faux ca. Tu ne peux pas utiliser le polymorphisme en manipulant un objet de la classe de base déclaré sur la pile. Tu dois soit passer par un pointeur ou une référence:

Figure * pFig = _listeDeFigures.getIeme(choix);
GroupeFigure * pGrp = static_cast<GroupeFigure*>(pFig);

Evidemment, faut modifier ta fonction getIeme(...). L'autre version:
Figure & fig = _listeDeFigures.getIeme(choix);
GroupFigure & grp = static_cast<GroupeFigure&>(fig);

Dans les deux cas, les opérateurs de conversion sont pas nécessaires:
GroupeFigure * pFig = _listeDeFigures.getIeme(choix);
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
J'oubliais de rajouter une chose: "c'est pas parce que ton programme compile, qu'il marche".
Messages postés
3
Date d'inscription
jeudi 25 décembre 2003
Statut
Membre
Dernière intervention
17 décembre 2007

Merci pour la réponse rapide.

J'ai un ami qui vient de trouvé l'erreur:

dans ma classe GroupeFigure, il n'y avait pas de constructeur qui prenait un Figure en paramètre.

Le cast marche tel que je l'avais mis. :)
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Non il marche pas. Si ta classe GroupeFigure possède des membres. Tu vas avoir des problèmes.
Messages postés
3
Date d'inscription
jeudi 25 décembre 2003
Statut
Membre
Dernière intervention
17 décembre 2007

finalement j'ai utilisé la solution que tu m'as proposée avec le &
et ça marche :)

-----"c'est pas parce que ton programme compile, qu'il marche"

effectivement -_-