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 

Reference croisée, question de NEWBIE!

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





PostPosted: Fri Mar 05, 2004 1:25 pm    Post subject: Reference croisée, question de NEWBIE! Reply with quote



Salut,
j'ai deux .h ainsi fait:
--- Chien.h ---
class Chien;
#include "Homme.h"
class Chien : public TObject
{
public :
Homme *tintin;
};
--- Homme.h ---
class Homme;
#include "Chien.h"
class Homme : public TObject
{
public :
Chien *milou;
};
----------------

Je trouve ca assez hideux comme solution, yaurait pas mieux?
Merci!
Gabriel
Back to top
Le Géant Vert
Guest





PostPosted: Fri Mar 05, 2004 2:02 pm    Post subject: Re: Reference croisée, question de NEWBIE! Reply with quote



Gabriel Landais wrote:

Quote:
Salut,
j'ai deux .h ainsi fait:
--- Chien.h ---
class Chien;
#include "Homme.h"
class Chien : public TObject
{
public :
Homme *tintin;
};
--- Homme.h ---
class Homme;
#include "Chien.h"
class Homme : public TObject
{
public :
Chien *milou;
};
----------------

Je trouve ca assez hideux comme solution, yaurait pas mieux?
Merci!
Gabriel

absolument pas, c'est LA bonne solution :)

Back to top
Rémy
Guest





PostPosted: Fri Mar 05, 2004 2:07 pm    Post subject: Re: Reference croisée, question de NEWBIE! Reply with quote




"Le Géant Vert" <_NOSPAM_legeantvert (AT) tiscali (DOT) fr> a écrit dans le message de
news:c2a19g$gic$1 (AT) news (DOT) tiscali.fr...
Quote:
Gabriel Landais wrote:

Salut,
j'ai deux .h ainsi fait:
--- Chien.h ---
class Chien;
#include "Homme.h"
class Chien : public TObject
{
public :
Homme *tintin;
};
--- Homme.h ---
class Homme;
#include "Chien.h"
class Homme : public TObject
{
public :
Chien *milou;
};
----------------

Je trouve ca assez hideux comme solution, yaurait pas mieux?
Merci!
Gabriel

absolument pas, c'est LA bonne solution Smile

Sauf qu'il faut protéger les includes contre les inclusions multiples (sinon
ça boucle)...




Back to top
Gabriel Landais
Guest





PostPosted: Fri Mar 05, 2004 2:09 pm    Post subject: Re: Reference croisée, question de NEWBIE! Reply with quote

Avec
#ifndef HommeH
#define HommeH
....
#endif?

Merci :)

Rémy a écrit :

Quote:
Sauf qu'il faut protéger les includes contre les inclusions multiples (sinon
ça boucle)...

Back to top
Rémy
Guest





PostPosted: Fri Mar 05, 2004 2:13 pm    Post subject: Re: Reference croisée, question de NEWBIE! Reply with quote


"Gabriel Landais" <gabriel.landaisemnSPROUTCH (AT) laposte (DOT) net> a écrit dans le
message de news:c2a1n4$mjg$1 (AT) news-reader4 (DOT) wanadoo.fr...
Quote:
Avec
#ifndef HommeH
#define HommeH
...
#endif?

Merci :)


Tout à fait.

L'autre solution est:

--- Chien.h ---
class Homme;
class Chien : public TObject
{
public :
Homme *tintin;
};

--- Homme.h ---
class Chien;
class Homme : public TObject
{
public :
Chien *milou;
};
----------------

On n'a pas besoin d'inclure la définition complète de Homme dans Chien.h
puisqu'on n'utilise qu'un pointeur. Il suffit de savoir que c'est une
classe. (et réciproquement).



Ce qui n'empêche pas de protéger les includes (on ne sait jamais par quel
chemin ils finiront par être appelés).

Rémy



Back to top
Gabriel Landais
Guest





PostPosted: Fri Mar 05, 2004 2:50 pm    Post subject: Re: Reference croisée, question de NEWBIE! Reply with quote

Merci ca devient plus clair maintennant Smile
Une dernière question, j'utilise GDI+ un peu partout dans mes fichiers,
je comprend pas vraiment comment l'inclure qu'une seule fois pour tout
le projet, parce que la il me l'include au moins 5 fois! Smile
Merci!
Gabriel

Rémy a écrit :

Quote:
"Gabriel Landais" <gabriel.landaisemnSPROUTCH (AT) laposte (DOT) net> a écrit dans le
message de news:c2a1n4$mjg$1 (AT) news-reader4 (DOT) wanadoo.fr...

Avec
#ifndef HommeH
#define HommeH
...
#endif?

Merci :)



Tout à fait.

L'autre solution est:

--- Chien.h ---
class Homme;
class Chien : public TObject
{
public :
Homme *tintin;
};

--- Homme.h ---
class Chien;
class Homme : public TObject
{
public :
Chien *milou;
};
----------------

On n'a pas besoin d'inclure la définition complète de Homme dans Chien.h
puisqu'on n'utilise qu'un pointeur. Il suffit de savoir que c'est une
classe. (et réciproquement).



Ce qui n'empêche pas de protéger les includes (on ne sait jamais par quel
chemin ils finiront par être appelés).

Rémy



Back to top
Michel Michaud
Guest





PostPosted: Fri Mar 05, 2004 3:23 pm    Post subject: Re: Reference croisée, question de NEWBIE! Reply with quote

Dans news:c2a19g$gic$1 (AT) news (DOT) tiscali.fr, Le Géant
Vert <_NOSPAM_legeantvert (AT) tiscali (DOT) fr> a écrit :
Quote:
Gabriel Landais wrote:

Salut,
j'ai deux .h ainsi fait:
--- Chien.h ---
class Chien;
#include "Homme.h"
class Chien : public TObject
{
public :
Homme *tintin;
};
--- Homme.h ---
class Homme;
#include "Chien.h"
class Homme : public TObject
{
public :
Chien *milou;
};
----------------

Je trouve ca assez hideux comme solution, yaurait pas mieux?
Merci!
Gabriel

absolument pas, c'est LA bonne solution Smile

Non, la bonne solution est de rendre les fichiers d'en-tête
assez complets en eux-mêmes, donc la déclaration des classes
devraient y être placées. Donc class Chien; devrait être
dans Homme.h et class Homme; dans Chien.h et alors il n'est
probablement pas nécessaire d'inclure les fichiers d'en-tête
de l'autre type. (Bien sûr, il faut aussi la protection contre
les inclusions multiples, mais c'est tout autre problème).

--
Michel Michaud [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/


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.