include et redefinition de type [C++] - C++ - Programmation
Marsh Posté le 11-11-2006 à 15:32:12
dans tes hpp, par exemple ton chaine.hpp :
Code :
|
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 ?
Marsh Posté le 11-11-2006 à 16:57:09
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
Marsh Posté le 11-11-2006 à 18:05:49
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...
Marsh Posté le 11-11-2006 à 19:18:15
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 |
Tu peux le mettre dans toute tes classes, c'est une habitude à adopter
En adaptant au nom de la classe bien sur
Marsh Posté le 11-11-2006 à 20:26:36
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.
Marsh Posté le 13-11-2006 à 11:35:38
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
Marsh Posté le 11-11-2006 à 15:05:09
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