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

  FORUM HardWare.fr
  Programmation
  C++

  [C++] include et redefinition de type

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] include et redefinition de type

n°1473902
koktel75
Posté le 11-11-2006 à 15:05:09  profilanswer
 

Cela fait quelques mois que j'étudie le C++, je m'en sort plutot bien en général...
Mais il y a une chose que je n'arrive pas à gérer et qui me fait perdre énormément de temps, les #include.
 
Lorsque je suis sur un projet qui comprend de multiples classes (et donc beaucoup de #include...) je me retrouve sans arrêt avec des erreurs de redefinition de type lors de la compilation avec Visual Studio.
 
Je sais parfaitement à quoi sont du ces erreurs...  
 
Dans mon projet actuel j'ai créé une classe chaine (qui se substitue à la classe string, pour des raisons pédagogiques). Je dois donc faire un #include "chaine.h" dans toutes mes classes qui utilisent chaine. Le problème c'est que quand deux classes autres que chaine contiennent des chaine (donc un #include "chaine.h" ) et en plus qu'une des deux fait un include de l'autre je me retrouve avec une erreur de redefinition de la classe chaine, ce qui est normal..... mais comment gérer cela efficacement dans un projet plus complexe ? existe-t-il une instruction spécifique dont j'ignorerais l'existence ?


Message édité par koktel75 le 11-11-2006 à 15:06:31
mood
Publicité
Posté le 11-11-2006 à 15:05:09  profilanswer
 

n°1473907
c0wb0y
:d
Posté le 11-11-2006 à 15:32:12  profilanswer
 

dans tes hpp, par exemple ton chaine.hpp :  

Code :
  1. #ifndef CHAINE_H
  2. #define CHAINE_H
  3. //des includes si necessaire...
  4. //definition de la classe
  5. class chaine {
  6. };
  7. #endif


 
Tu appliques ce principe dans chacun de tes hpp de définition de classe, et grâce à ça, si le fichier a déjà été inclu, il ne le sera pas une deuxième fois si tu fais un 2ème appel à #include "le_fichier_concerné"
 
D'ailleurs à ce sujet j'ai une question, j'ai lu que la directive #pragma once permettait d'avoir le même comportement que ce que j'ai décrit ci-dessus, mais comme je l'ai pas vu souvent dans différent source, j'me demande si c'était quelque chose qui était standard ou pas ?

n°1473934
papangue
Posté le 11-11-2006 à 16:57:09  profilanswer
 

standard pour visual studio... après est-ce que ca marche avec d'autre compilateur - je ne sais... si quelqu'un sait merci de nous éclairer

n°1473964
koktel75
Posté le 11-11-2006 à 18:05:49  profilanswer
 

J'avais effectivement entendu parler de #ifndef mais je ne savais pas qu'il fallait que je le mette dans la classe que je serais eventuellement emmené a tenté de redefinir. Donc dans ce cas la classe chaine. Je m'entetais à essayer de le caser dans les autres classes... pffff  
 
Bon en tout cas Merci cOwbOy !!!
 
Comme tu t'en doute je ne pourrais pas beaucoup t'aider concernant la directive #pragma once...

n°1473986
c0wb0y
:d
Posté le 11-11-2006 à 19:18:15  profilanswer
 

koktel75 a écrit :

J'avais effectivement entendu parler de #ifndef mais je ne savais pas qu'il fallait que je le mette dans la classe que je serais eventuellement emmené a tenté de redefinir. Donc dans ce cas la classe chaine. Je m'entetais à essayer de le caser dans les autres classes... pffff  
 
Bon en tout cas Merci cOwbOy !!!
 
Comme tu t'en doute je ne pourrais pas beaucoup t'aider concernant la directive #pragma once...


 
Tu peux le mettre dans toute tes classes, c'est une habitude à adopter :)
 
En adaptant au nom de la classe bien sur ;)

n°1474000
tbp
Posté le 11-11-2006 à 20:26:36  profilanswer
 

c0wb0y a écrit :

j'ai lu que la directive #pragma once ... j'me demande si c'était quelque chose qui était standard ou pas ?


Une #pragma est par définition non standard, ce qui ne veut pas dire qu'elle ne soit pas largement supportée. Voir les errements drolatiques de gcc, RMS, FSF & co pour savoir si oui ou non ya bon #pragma once.

n°1474070
c0wb0y
:d
Posté le 12-11-2006 à 00:33:01  profilanswer
 

Merci des renseignements  :jap:

n°1474410
-ThX-
Not here anymore
Posté le 13-11-2006 à 11:35:38  profilanswer
 

papangue a écrit :

standard pour visual studio... après est-ce que ca marche avec d'autre compilateur - je ne sais... si quelqu'un sait merci de nous éclairer


 
Oui c'est standard.
 
ifndef est une contraction de "If ! defined"
 
par contre, pragma once n'est pas standard


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

  [C++] include et redefinition de type

 

Sujets relatifs
[resolu] Probleme passage iframe --> include[résolu...enfin presq]Choix multiple pour une propriété de type string
input.type="something" ne fonctionne pas sous IE Soluce inside[Visual C++] Comment forcer une priorité aux répertoires d'include ?
quelle type de table pour ma base de donnee ?Wamp 5 : ne gère pas les include() ?
[C#] constructeur dynamique suivant le type passé en paramètreNumérique dans Balise <INPUT TYPE='TEXT'> + PHP
fonction qui renvoie le type d'une variable 
Plus de sujets relatifs à : [C++] include et redefinition de type


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