| View previous topic :: View next topic |
| Author |
Message |
Nicolas ROBERT Guest
|
Posted: Wed Sep 08, 2004 2:11 pm Post subject: Comment éviter le message d'erreur 'redefinition' |
|
|
Bonjour,
Je développe une application avec différentes classes, dépendantes les une
des autres.
dans certaines classes, les attributs sont des objets d'une autre classe.
Je suis donc obligé d'inclure la ligne de code suivante:
#include "fichier.h de ma classe dont dépent l'attibut"
cette ligne me génère plusieurs erreurs de ce type:
error C2371: '_StructureCreee' :redefinition; different basic types
Je crois comprendre que certaines de mes structures, déclarées dans le
fichier.h que j'inclue, sont donc redéclarées. Comment éviter ce genre
d'erreur ?
Cdt
nicolas
|
|
| Back to top |
|
 |
fredatwork Guest
|
Posted: Wed Sep 08, 2004 2:18 pm Post subject: Re: Comment éviter le message d'erreur 'redefinition' |
|
|
Rendre l'inclusion du fichier conditionnelle en ajoutant :
#ifndef FIC1_DEJA_INCLUS
#define FIC1_DEJA_INCLUS
#include "fic1.h"
#endif
dans chaque fichier où fic1.h est nécessaire.
"Nicolas ROBERT" <nicolas.robert (AT) prospective-software (DOT) fr> a écrit dans le
message news: chn3ud$sd2$1 (AT) news-reader1 (DOT) wanadoo.fr...
| Quote: | Bonjour,
Je développe une application avec différentes classes, dépendantes les une
des autres.
dans certaines classes, les attributs sont des objets d'une autre classe.
Je suis donc obligé d'inclure la ligne de code suivante:
#include "fichier.h de ma classe dont dépent l'attibut"
cette ligne me génère plusieurs erreurs de ce type:
error C2371: '_StructureCreee' :redefinition; different basic types
Je crois comprendre que certaines de mes structures, déclarées dans le
fichier.h que j'inclue, sont donc redéclarées. Comment éviter ce genre
d'erreur ?
Cdt
nicolas
|
|
|
| Back to top |
|
 |
Christophe de VIENNE Guest
|
Posted: Wed Sep 08, 2004 2:23 pm Post subject: Re: Comment éviter le message d'erreur 'redefinition' |
|
|
Nicolas ROBERT a écrit :
[snip]
| Quote: | Je crois comprendre que certaines de mes structures, déclarées dans le
fichier.h que j'inclue, sont donc redéclarées. Comment éviter ce genre
d'erreur ?
|
En protégeant tes entêtes de la double inclusion :
toto.h
------
#ifndef TOTO_H_
#define TOTO_H_
// définition de la classe Toto (par exemple)
#endif // TOTO_H_
// fin du fichier
A+
Christophe
--
Christophe de Vienne
|
|
| Back to top |
|
 |
Matthieu Moy Guest
|
Posted: Wed Sep 08, 2004 2:24 pm Post subject: Re: Comment éviter le message d'erreur 'redefinition' |
|
|
"fredatwork" <fredatwork (AT) hotmail (DOT) com> writes:
| Quote: | Rendre l'inclusion du fichier conditionnelle en ajoutant :
#ifndef FIC1_DEJA_INCLUS
#define FIC1_DEJA_INCLUS
#include "fic1.h"
#endif
dans chaque fichier où fic1.h est nécessaire.
|
Ou bien
#ifndef FIC1_DEJA_INCLUS
#define FIC1_DEJA_INCLUS
au début de fic1.h et
#endif
a la fin. (Plus simple à écrire, mais demande au préprocesseur de
parser fic1.h de toutes façons => ça compile un peu plus doucement)
--
Matthieu
|
|
| Back to top |
|
 |
Christophe de VIENNE Guest
|
Posted: Wed Sep 08, 2004 2:25 pm Post subject: Re: Comment éviter le message d'erreur 'redefinition' |
|
|
fredatwork a écrit :
| Quote: | Rendre l'inclusion du fichier conditionnelle en ajoutant :
#ifndef FIC1_DEJA_INCLUS
#define FIC1_DEJA_INCLUS
#include "fic1.h"
#endif
dans chaque fichier où fic1.h est nécessaire.
|
Et pourquoi pas directement dans fic1.h ? C'est quand même nettement
plus simple et maintenable.
Je dirais même plus, c'est une habitude à prendre.
A+
Christophe
--
Christophe de Vienne
|
|
| Back to top |
|
 |
Nicolas ROBERT Guest
|
Posted: Wed Sep 08, 2004 2:36 pm Post subject: Re: Comment éviter le message d'erreur 'redefinition' |
|
|
Merci beaucoup.
Cdt
nicolas
|
|
| Back to top |
|
 |
fredatwork Guest
|
Posted: Wed Sep 08, 2004 3:14 pm Post subject: Re: Comment éviter le message d'erreur 'redefinition' |
|
|
"Christophe de VIENNE" <cdevienne (AT) alphacent (DOT) com> a écrit dans le message
news: newscache$h28q3i$dih$1 (AT) guronzan (DOT) alphacent.com...
| Quote: | fredatwork a écrit :
Rendre l'inclusion du fichier conditionnelle en ajoutant :
#ifndef FIC1_DEJA_INCLUS
#define FIC1_DEJA_INCLUS
#include "fic1.h"
#endif
dans chaque fichier où fic1.h est nécessaire.
Et pourquoi pas directement dans fic1.h ? C'est quand même nettement
plus simple et maintenable.
Je dirais même plus, c'est une habitude à prendre.
A+
Christophe
--
Christophe de Vienne
|
Bien sûr !
J'ai répondu un peu vite ...
|
|
| Back to top |
|
 |
Christophe de VIENNE Guest
|
Posted: Wed Sep 08, 2004 3:29 pm Post subject: Re: Comment éviter le message d'erreur 'redefinition' |
|
|
Matthieu Moy a écrit :
| Quote: | "fredatwork" <fredatwork (AT) hotmail (DOT) com> writes:
Rendre l'inclusion du fichier conditionnelle en ajoutant :
#ifndef FIC1_DEJA_INCLUS
#define FIC1_DEJA_INCLUS
#include "fic1.h"
#endif
dans chaque fichier où fic1.h est nécessaire.
Ou bien
#ifndef FIC1_DEJA_INCLUS
#define FIC1_DEJA_INCLUS
au début de fic1.h et
#endif
a la fin. (Plus simple à écrire, mais demande au préprocesseur de
parser fic1.h de toutes façons => ça compile un peu plus doucement)
|
Le temps gagné en compilo compense-t-il le temps perdu à 1/ écrire à
protection systématiquement 2/ compiler pour se rendre compte qu'on l'a
oublié 3/ documenter fich1.h de manière à ce que nos collaborateurs
pensent eux aussi à la protection 4/ s'expliquer avec ses collaborateurs
5/ ...
J'en doute fort...
--
Christophe de Vienne
|
|
| Back to top |
|
 |
Matthieu Moy Guest
|
Posted: Wed Sep 08, 2004 3:43 pm Post subject: Re: Comment éviter le message d'erreur 'redefinition' |
|
|
Christophe de VIENNE <cdevienne (AT) alphacent (DOT) com> writes:
| Quote: | Le temps gagné en compilo compense-t-il le temps perdu à 1/ écrire à
protection systématiquement 2/ compiler pour se rendre compte qu'on
l'a oublié 3/ documenter fich1.h de manière à ce que nos
collaborateurs pensent eux aussi à la protection 4/ s'expliquer avec
ses collaborateurs 5/ ...
J'en doute fort...
|
Moi aussi. Mais sachant qu'il y a des défenseurs de la protection au
niveau du #include, et ayant peur que l'auteur du message auquel je
répondais en fasse partie, j'ai donné par avance le contre-argument
pour éviter de le froisser ;-)
--
Matthieu
|
|
| Back to top |
|
 |
Loïc Joly Guest
|
Posted: Thu Sep 09, 2004 12:10 am Post subject: Re: Comment éviter le message d'erreur 'redefinition' |
|
|
Matthieu Moy wrote:
| Quote: | Christophe de VIENNE <cdevienne (AT) alphacent (DOT) com> writes:
Le temps gagné en compilo compense-t-il le temps perdu à 1/ écrire à
protection systématiquement 2/ compiler pour se rendre compte qu'on
l'a oublié 3/ documenter fich1.h de manière à ce que nos
collaborateurs pensent eux aussi à la protection 4/ s'expliquer avec
ses collaborateurs 5/ ...
J'en doute fort...
Moi aussi. Mais sachant qu'il y a des défenseurs de la protection au
niveau du #include, et ayant peur que l'auteur du message auquel je
répondais en fasse partie, j'ai donné par avance le contre-argument
pour éviter de le froisser
|
Certains préconisent les deux : Le interne pour que ça marche tout le
temps, l'externe pour que ça marche plus vite. Perso, je n'ai jamais essayé.
--
Loïc
|
|
| Back to top |
|
 |
|