Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1189 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] #include -> Type inconnu

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] #include -> Type inconnu

n°2006123
Xtrmboss
Viva las vegas !
Posté le 30-06-2010 à 16:54:37  profilanswer
 

Bonjour a tous,
 
Je suis actuellement en train de bosser sur un mini Worms en interface console, je travaille sous C++ Builder 2009 et j'ai un soucis.
 
Pour expliquer mon problème je vais utiliser 3 fichiers (CA.h, CB.h et CC.h), ceux-ci contiennent chacun 1 classe (CA pour CA.h, CB pour CB.h, etc..).
 
Dans CA.h, j'ai tapé #include "CB.h"
CB.h, j'ai tapé #include "CC.h"
CC.h, j'ai tapé #inclide "CA.h"
 
Et final, CA.h inclut CB.h, CB.h inclut CC.h et CC.h inclut CA.h.
 
http://lh4.ggpht.com/_mH25OtRV0n0/TCtZqumOy_I/AAAAAAAAAEU/yIzScoA-PiU/Sans%20titre.jpg
 
Dans la classe CA, je souhaite créer une variable nommée attribut du type CB or Builder me dit qu'il ne connais pas ce type. Pourtant CA.h inclut CB.h donc le type CB devrait être connu.
 
Evidemment j'ai compris que mon erreur été d'avoir inclut des fichiers entre eux et cela finissait par former une "boucle d'inclusion" (je ne sais pas si c'est le terme approprié). Mais j'ai besoin de garder ce fonctionnement entre les fichiers/classes.
 
 
Donc ma question est : Est-il possible d'inclure les fichiers en "boucle d'inclusion" sans rencontrer ce problème ? Peut-être il faut rajouter un mot-clef que je ne connaisse pas ?
 
 
Vos lumières me serais d'un grand secours merci :jap:  
 
 


---------------
Coz every girl crazy bout a sharp dressed man
mood
Publicité
Posté le 30-06-2010 à 16:54:37  profilanswer
 

n°2006145
guepe
J'ai du noir sur la truffe ?
Posté le 30-06-2010 à 18:28:55  profilanswer
 

C'est une dépendance cyclique, il te faut déclarer l'existence des classes avant de les utiliser (le linker résoudra le problème à la fin). Un petit class CA; par exemple dans CC.h (enfin je pense).


---------------
Un blog qu'il est bien
n°2006146
Xtrmboss
Viva las vegas !
Posté le 30-06-2010 à 18:52:57  profilanswer
 

Merci de m'aider, ça a résolut mon problème :) MAIS mis en évidence un autre :
 
 
http://lh4.ggpht.com/_mH25OtRV0n0/TCt0wvC2JSI/AAAAAAAAAEk/vy4LuwgqBFw/Sans%20titre.jpg
 
 
Ici CM.h inclue CA.h, et CC est dérivée de CM.
CC.h n'inclut pas CA.h.
Je n'ai aucun attribut dans la classe CC.
 
 
Le soucis est le même sauf qu'il se trouve au niveau de la classe CC.  
C'est a dire : "type inconnu" mais ici l'erreur se trouve après le morceau de code correspondant à l'héritage.
 
Ici je sèche, j'ai tenté de rajouter "class CM;" avant la déclaration de CC mais rien n'a changé.
 
Une idée ?


---------------
Coz every girl crazy bout a sharp dressed man
n°2006150
Joel F
Real men use unique_ptr
Posté le 30-06-2010 à 19:54:35  profilanswer
 

dépendances cycliques = code mal découplé = code mal désigné.
 
Es tu tu sur d'avoir besoin de ces spaghetties ?

n°2006152
Un Program​meur
Posté le 30-06-2010 à 20:52:44  profilanswer
 

Des dépendances circulaires ça arrive suffisamment souvent pour qu'à cette seule indication déclarer le code mal conçu me semble excessif.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°2006153
Joel F
Real men use unique_ptr
Posté le 30-06-2010 à 20:53:53  profilanswer
 

je suis pas de ton avis. Y a vraiment très peu de cas ou la dépendance ne peut etre brisée par une forward.

n°2006204
Un Program​meur
Posté le 01-07-2010 à 08:52:09  profilanswer
 

Joel F a écrit :

je suis pas de ton avis. Y a vraiment très peu de cas ou la dépendance ne peut etre brisée par une forward.

 

Ah... nous avons l'air d'etre d'accord sur le fond. Mettre une definition quand une declaration suffit n'est pas pour moi un probleme de conception, juste d'organisation du code.  Tout comme ne pas mettre la definition de membres inline dans la classe mais en dehors.

 

Je ne vois guere qu'avoir un membre d'un type template qui pourrait poser des problemes necessitant le code plus en profondeur.  Et je ne suis pas sur qu'il y ait des cas ou il faut changer la conception plutot que l'expression de cette conception.


Message édité par Un Programmeur le 01-07-2010 à 09:01:13

---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°2006206
Un Program​meur
Posté le 01-07-2010 à 09:00:07  profilanswer
 

Xtrmboss a écrit :

Merci de m'aider, ça a résolut mon problème :) MAIS mis en évidence un autre :
 
 
http://lh4.ggpht.com/_mH25OtRV0n0/ [...] 0titre.jpg
 
 
Ici CM.h inclue CA.h, et CC est dérivée de CM.
CC.h n'inclut pas CA.h.
Je n'ai aucun attribut dans la classe CC.


 
Il ne faut fournir la definition plutot qu'une declaration que si c'est necessaire, cad que si la classe herite ou a un membre d'autre classe.  Avoir un membre qui est un pointeur vers l'autre classe ne demande que la declaration.
 
En general, l'aggregration d'UML est implementee avec des pointeurs et pas des membres directement (qui sont mieux representes en UML par la composition, mais on peut avoir des raisons d'implementer une composition par un pointeur), donc dans ton diagramme le seul cas ou tu as besoin d'avoir une definition, c'est CC qui a besoin de la definition de CM, CM peut se contenter d'une declaration de CA, CA de CB, CB de CC.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°2006207
Joel F
Real men use unique_ptr
Posté le 01-07-2010 à 09:00:57  profilanswer
 

ouais je me susi mal exprimé. Je pensais aussi au gens qui passe font des agrégations cycliques ou passe des trucs par valeurs au lieu d'utilsiez pointeur ou référence.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] #include -> Type inconnu

 

Sujets relatifs
[Ada+C] Storage Error à la lecture d'une entrée Midi en C via Ada[C] passage par adresse de chaines de caracteres (résolu)
Créer un widget type iframe pour afficher ses derniers articlesouverture d'un fichier en C
[Topic unique] .Net @ ProgTraitement de gros fichiers TXT (type PHPMyAdmin)
[C#/.Net2.0] Application Settings et types (très) complexesInclude pete les plombs !
Besoin d'aide en CType de variable tableau
Plus de sujets relatifs à : [C++] #include -> Type inconnu


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR