Heritage et cast [Résolu]

Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Dernière intervention
11 mai 2009
- - Dernière réponse : cs_LordBob
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
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..."
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Dernière intervention
22 août 2010
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de vecchio56
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Dernière intervention
11 mai 2009
0
Merci
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..."
Commenter la réponse de cs_LordBob
Messages postés
2674
Date d'inscription
vendredi 25 janvier 2002
Dernière intervention
6 février 2013
0
Merci
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
Commenter la réponse de DeAtHCrAsH
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Dernière intervention
11 mai 2009
0
Merci
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..."
Commenter la réponse de cs_LordBob
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Dernière intervention
28 juillet 2008
0
Merci
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.
Commenter la réponse de luhtor
Messages postés
2674
Date d'inscription
vendredi 25 janvier 2002
Dernière intervention
6 février 2013
0
Merci
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
Commenter la réponse de DeAtHCrAsH
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Dernière intervention
11 mai 2009
0
Merci
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..."
Commenter la réponse de cs_LordBob

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.