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 

Types incomplets

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Frédéric Mayot
Guest





PostPosted: Thu Feb 12, 2004 3:05 pm    Post subject: Types incomplets Reply with quote



Bonjour,

Un petit souci avec mes includes et mes types incomplets.

struct conteneur
{
typedef std::vector<contenu*>::iterator iterator;
std::vector<contenu*> m_mon_contenu;
void une_fonction(){m_mon_contenu[1234]->ma_fonction();}
};

struct contenu
{
conteneur::iterator m_position;
void ma_fonction(){}
};

Je veux bien faire des types incomplets mais ça ne résoud pas le
problème (que vous voyez bien sûr) ...

Fred
Back to top
Falk Tannhäuser
Guest





PostPosted: Thu Feb 12, 2004 3:36 pm    Post subject: Re: Types incomplets Reply with quote



Frédéric Mayot wrote:
Quote:

Bonjour,

Un petit souci avec mes includes et mes types incomplets.

struct contenu;
struct conteneur
{
typedef std::vector<contenu*>::iterator iterator;
std::vector<contenu*> m_mon_contenu;
void une_fonction(){m_mon_contenu[1234]->ma_fonction();}
Remplacer par :

void une_fonction();
Quote:
};

struct contenu
{
conteneur::iterator m_position;
void ma_fonction(){}
};

inline void conteneur::une_fonction(){m_mon_contenu[1234]->ma_fonction();}

Voilà voilà
Falk

Back to top
Frédéric Mayot
Guest





PostPosted: Thu Feb 12, 2004 3:39 pm    Post subject: Re: Types incomplets Reply with quote




Quote:
inline void conteneur::une_fonction(){m_mon_contenu[1234]->ma_fonction();}

Oui, bon d'accord... mais j'avais oublié de préciser que conteneur et
contenu étaient dans deux fichiers d'entête différents...

fichier conteneur.h ----
struct contenu;
struct conteneur
{
typedef std::vector<contenu*>::iterator iterator;
std::vector<contenu*> m_mon_contenu;
void une_fonction();
};
----

fichier contenu.h ----
struct contenu
{
conteneur::iterator m_position;
void ma_fonction(){}
};
----

Back to top
Falk Tannhäuser
Guest





PostPosted: Thu Feb 12, 2004 4:38 pm    Post subject: Re: Types incomplets Reply with quote

Frédéric Mayot wrote:
Quote:

inline void conteneur::une_fonction(){m_mon_contenu[1234]->ma_fonction();}

Oui, bon d'accord... mais j'avais oublié de préciser que conteneur et
contenu étaient dans deux fichiers d'entête différents...

fichier conteneur.h ----
struct contenu;
// Pas de #include "contenu.h" !
struct conteneur
{
typedef std::vector<contenu*>::iterator iterator;
std::vector<contenu*> m_mon_contenu;
void une_fonction();
};
----

fichier contenu.h ----
#include "conteneur.h"
struct contenu
{
conteneur::iterator m_position;
void ma_fonction(){}
};
----

Dans ce cas-là, mieux vaut renoncer à rendre conteneur::une_fonction
inline, et mettre son implémentation dans le fichier conteneur.cxx :
#include "conteneur.h"
#include "contenu.h"

void conteneur::une_fonction(){m_mon_contenu[1234]->ma_fonction();}

Ainsi, l'utilisateur de conteneur::une_fonction a juste besoin
d'inclure conteneur.h, mais pourra se passer de contenu.h .

Falk

Back to top
Manuel
Guest





PostPosted: Mon Feb 16, 2004 12:20 am    Post subject: Re: Types incomplets Reply with quote

"Falk Tannhäuser" <falk.tannhauser (AT) crf (DOT) canon.fr> a écrit dans le message de
news:402BABF2.9FFD6DE5 (AT) crf (DOT) canon.fr...
Quote:
Frédéric Mayot wrote:

inline void
conteneur::une_fonction(){m_mon_contenu[1234]->ma_fonction();}

Oui, bon d'accord... mais j'avais oublié de préciser que conteneur et
contenu étaient dans deux fichiers d'entête différents...

fichier conteneur.h ----
struct contenu;
// Pas de #include "contenu.h" !
struct conteneur
{
typedef std::vector<contenu*>::iterator iterator;
std::vector<contenu*> m_mon_contenu;
void une_fonction();
};
----

fichier contenu.h ----
#include "conteneur.h"

Non! ce n'est ni nécéssaire, ni désirable
(pollution de l'espace de noms)
AMHA

Quote:
struct contenu
{
conteneur::iterator m_position;
void ma_fonction(){}
};
----

Dans ce cas-là, mieux vaut renoncer à rendre conteneur::une_fonction
inline, et mettre son implémentation dans le fichier conteneur.cxx :
#include "conteneur.h"
#include "contenu.h"

C'est bien ici qu'il faut inclure le (ou les) fichier(s) d'entête.

Quote:

void conteneur::une_fonction(){m_mon_contenu[1234]->ma_fonction();}

Ainsi, l'utilisateur de conteneur::une_fonction a juste besoin
d'inclure conteneur.h, mais pourra se passer de contenu.h .

Falk

--

- Manuel
to reply, swap the name with the domain.



Back to top
Falk Tannhäuser
Guest





PostPosted: Mon Feb 16, 2004 9:54 am    Post subject: Re: Types incomplets Reply with quote

Manuel wrote:
Quote:

"Falk Tannhäuser" <falk.tannhauser (AT) crf (DOT) canon.fr> a écrit dans le message de
news:402BABF2.9FFD6DE5 (AT) crf (DOT) canon.fr...
Frédéric Mayot wrote:
[...]
fichier contenu.h ----
#include "conteneur.h"

Non! ce n'est ni nécéssaire, ni désirable
(pollution de l'espace de noms)
AMHA
Dans ce cas il me paraît difficile de faire référence à des membres de

'conteneur' dans 'contenu'.
Quote:
struct contenu
{
conteneur::iterator m_position;
std::vector<contenu*>::iterator m_position;
void ma_fonction(){}
};
Par contre, si le typedef dans 'conteneur' évolue, il faut penser

à mettre à jour la définition de 'm_position'. Si on l'oublie, on
devrait s'en rendre compte à la compilation de conteneur.cxx ;
faut voir quel est le moindre mal...

Falk

Back to top
Manuel
Guest





PostPosted: Mon Feb 16, 2004 10:18 am    Post subject: Re: Types incomplets Reply with quote

"Falk Tannhäuser" <falk.tannhauser (AT) crf (DOT) canon.fr> a écrit dans le message de
news:4030935C.44767F23 (AT) crf (DOT) canon.fr...
Quote:
Manuel wrote:

"Falk Tannhäuser" <falk.tannhauser (AT) crf (DOT) canon.fr> a écrit dans le message
de
news:402BABF2.9FFD6DE5 (AT) crf (DOT) canon.fr...
Frédéric Mayot wrote:
[...]
fichier contenu.h ----
#include "conteneur.h"

Non! ce n'est ni nécéssaire, ni désirable
(pollution de l'espace de noms)
AMHA
Dans ce cas il me paraît difficile de faire référence à des membres de
'conteneur' dans 'contenu'.

Sorry... c'est toi qui a raison. J'avais simplement pas "vu" le typedef.
Je serai plus attentif avant de poster (surtout à 1h du matin ;-)

[snip]

--

- Manuel
to reply, swap the name with the domain.



Back to top
Fabien LE LEZ
Guest





PostPosted: Thu Feb 19, 2004 8:34 pm    Post subject: Re: Types incomplets Reply with quote

On Thu, 12 Feb 2004 16:05:33 +0100, Frédéric Mayot <toto (AT) toto (DOT) com>
wrote:

Quote:
Types incomplets

C'est la manière politiquement correcte de dire "unijambistes" ?

--
;-)

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.