C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Comment éviter le message d'erreur 'redefinition'

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Nicolas ROBERT
Guest





PostPosted: Wed Sep 08, 2004 2:11 pm    Post subject: Comment éviter le message d'erreur 'redefinition' Reply with 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
fredatwork
Guest





PostPosted: Wed Sep 08, 2004 2:18 pm    Post subject: Re: Comment éviter le message d'erreur 'redefinition' Reply with 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.

"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





PostPosted: Wed Sep 08, 2004 2:23 pm    Post subject: Re: Comment éviter le message d'erreur 'redefinition' Reply with quote



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





PostPosted: Wed Sep 08, 2004 2:24 pm    Post subject: Re: Comment éviter le message d'erreur 'redefinition' Reply with quote

"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





PostPosted: Wed Sep 08, 2004 2:25 pm    Post subject: Re: Comment éviter le message d'erreur 'redefinition' Reply with quote

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





PostPosted: Wed Sep 08, 2004 2:36 pm    Post subject: Re: Comment éviter le message d'erreur 'redefinition' Reply with quote

Merci beaucoup.

Cdt
nicolas


Back to top
fredatwork
Guest





PostPosted: Wed Sep 08, 2004 3:14 pm    Post subject: Re: Comment éviter le message d'erreur 'redefinition' Reply with quote


"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





PostPosted: Wed Sep 08, 2004 3:29 pm    Post subject: Re: Comment éviter le message d'erreur 'redefinition' Reply with quote

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





PostPosted: Wed Sep 08, 2004 3:43 pm    Post subject: Re: Comment éviter le message d'erreur 'redefinition' Reply with quote

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





PostPosted: Thu Sep 09, 2004 12:10 am    Post subject: Re: Comment éviter le message d'erreur 'redefinition' Reply with quote

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 Wink

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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.