begin process at 2012 05 29 08:54:47
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

Heritage et cast


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Heritage et cast

lundi 23 avril 2007 à 00:31:16 | Heritage et cast

LordBob

Membre Club
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..."
lundi 23 avril 2007 à 08:44:56 | Re : Heritage et cast

vecchio56

Administrateur CodeS-SourceS
Réponse acceptée !
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

lundi 23 avril 2007 à 09:32:49 | Re : Heritage et cast

LordBob

Membre Club
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..."
lundi 23 avril 2007 à 12:18:25 | Re : Heritage et cast

DeAtHCrAsH

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
lundi 23 avril 2007 à 12:33:31 | Re : Heritage et cast

LordBob

Membre Club
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..."
lundi 23 avril 2007 à 18:52:09 | Re : Heritage et cast

luhtor

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.


lundi 23 avril 2007 à 20:53:14 | Re : Heritage et cast

DeAtHCrAsH

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
lundi 23 avril 2007 à 21:58:27 | Re : Heritage et cast

LordBob

Membre Club
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..."


Cette discussion est classée dans : class, heritage, cast, cenvironnement, cinterieur


Répondre à ce message

Sujets en rapport avec ce message

Héritage multiple et reinterpret_cast [ par vecchio56 ] C'est une des premières fois que je me frotte à l'héritage multiple, et je me trouve devant un petit problème: Je prends un exemple très simple: clas dynamic_cast ne marche pas sous Visual C++ !! [ par feanor11 ] La fonction de cast dynamic_cast ne marche pas sous Visual C++ 6.0, alors qu'elle marche très bien sous Dev C++. #include #include using namespace Creation de class en C++ [ par js1000 ] Bonjour a tous !Je suis novice en C++ et je suis en train d'apprende les bases. J'ai donc une question a vous posez :Je veux ecrire une classe Matrice [Class] Problème avec définitions multiples [ par o0Leo0o ] Bonjour. J'ai deux classes, CInit (qui contient la fonction InitSDL) et CBMP (qui contient la fonction ShowBMP), ces deux class font appels à screen field ... has incomplete type [ par Yossi ] Bonjour, j'ai deux classes : bdd et requete. j'ai fait un #include "bdd.h" dans la définition de la classe requete (et apres le #indef). je déclare Creation de librairie. Besoin d'aide. [ par Sunsawe ] Bonjour, Au cours de mon périple pour réaliser un petit projet personnel, je suis resté bloqué à l'utilisation de classes qui semblaient allergiques e [stringstream]Erreur type:uses undefined class [ par Sunsawe ] Bonjour, Voilà dans un projet (création de dll) j'utilise des stringstream. Pour celà, j'inclu : #include et je déclare :  std::stringstream sstr; e class std:: [ par imanedaoudi ] Bonjour tous,je veux affecter le tableau inter à une autre zone mémoire? pourquoi l'affectation ci dessus est fausse#includestd::vectorinter((*nbre)); l'affichage dans EditBox [ par imanedaoudi ] salut,j'ai les deux classes:class point                     class ligne{ Question sur CreateWindowEx [ par Pathfinder ] Bonjour,J'ai un petit probleme, j'ai dans mon application une zone TEXT, je voudrai le changer par une zone Rich Edit je déclare donc ceci:#include #i


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,562 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales