Heritage et cast

Résolu
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 - 23 avril 2007 à 00:31
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 - 23 avril 2007 à 21:58
Bonsoir a tous,
voila en fait j'ai deux classes comme ceci:

class CEnvironnement
{ ... }

class CInterieur : public CEnvironnement
{ ... }

en fait apres j'ai un tableau de CEnvironnement dans lequel je met plusieurs objet dérivant chacun de la classe CEnvironnement.

en fait à un moment j'aimerais récupéré les environnements contenue dans le tableau et les caster, mais cela ne marche pas. Je procéde comme ceci:

CInterieur *in = (CInterieur *) tabEnv[0];
ou
CInterieur *in = dynamic_cast<CInterieur *>( tabEnv[0] );

mais les deux solutions me donne la meme erreur et me dise que la convertion est impossible, et je ne comprend pas vraiment pourquoi. Est-ce que quelqu'un pourrait m'apporter un peu de lumiere svp.

Merci par avance.
Bob...
"Vaut mieux se taire et passer pour un con, que de l'ouvrir et ne laisser aucun doute sur le sujet..."

7 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
23 avril 2007 à 08:44
Erreur de compilvation ou d'exécution?

Tu n'a pas montré ta déclaration de tabEnv (logiquement: CEnvironnement* tabEnv[TABENV_COUNT];)
Si tu sais que l'objet a récupérer est un bien de type CInterieur, le dynamic_cast est inutile

_____________________________________
Un éditeur de ressources gratuit pour Windows
3
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
23 avril 2007 à 09:32
l'erreur se produit à la compilation!
mais j'ai utiliser un petit truc pour résoudre mon problème, et meme si mon modéle devient alors légérement moins propre je pense que je vais garder ma solution!
Bob...
"Vaut mieux se taire et passer pour un con, que de l'ouvrir et ne laisser aucun doute sur le sujet..."
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
23 avril 2007 à 12:18
Peut etre que je me trompe mais ton affaire n'a pas l'air bien penssé.
Tu as des objets de type CEnvironnement que tu veux caster en CInterieure, sachant que la class CInterieur hérite de la classe CEnvironnement.
Tes deux types d'objets sont différents malgré l'héritage, et un cast explicite n'est pas jouable.

A ta place je surchargerais le constructeur de la classe CInterieure de telle sorte qu'il soit capable d'initialiser un objet CInterieure à partir d'un objet CEnvironnement.

Ainsi tu te crées deux tableaux de taille identiques (tabEnv et tabInt) et tu remplies tabInt à partir de tabEnv.

Shell
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
23 avril 2007 à 12:33
je ne vois pas pourquoi mon héritage est mal pensé!

c'est comme si j'avais une classe fichier que je voulais spécialiser en fichier image et fichier vidéo.

si je fait un tableau de fichier, je pourrais également y mettre mes fichiers images et mes fichiers video qui sont bien des fichiers malgrès qu'ils soit légérement différent.

c'est une chose similaire que je fais ci dessus, je ne vois pas en quoi cela serait une mauvaise conception!
Bob...
"Vaut mieux se taire et passer pour un con, que de l'ouvrir et ne laisser aucun doute sur le sujet..."
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
23 avril 2007 à 18:52
Ya pas de pb avec ce cast, mais ce qui est étrange c'est que le compilo le refuse. Enfin au lieu d'utiliser un cast C, j'utiliserais kan meme static_cast< > meme si ca revient au meme.
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
23 avril 2007 à 20:53
Je me suis mal exprimé. Ce qui ne me convient pas c'est la méthode employée. Pour ma part j'évite ce genre de pseudo souplesse. Après à chacun ses habitude.

As tu vérifié le niveau d'alertes de ton compilo ? Dois t'il gérer les warnings comme des erreurs ?

Shell
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
23 avril 2007 à 21:58
non cela n'est pas du au niveau d'alerte du compilo :)
mais de toute avec une petite ruse je m'en suis très bien sortie et tant pi si dans le fond ce n'est pas très correcte, apres tout ce n'est que pour un petit code :)
Bob...
"Vaut mieux se taire et passer pour un con, que de l'ouvrir et ne laisser aucun doute sur le sujet..."
0
Rejoignez-nous