| View previous topic :: View next topic |
| Author |
Message |
Frédéric Mayot Guest
|
Posted: Thu Feb 12, 2004 3:05 pm Post subject: Types incomplets |
|
|
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
|
Posted: Thu Feb 12, 2004 3:36 pm Post subject: Re: Types incomplets |
|
|
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
|
Posted: Thu Feb 12, 2004 3:39 pm Post subject: Re: Types incomplets |
|
|
| 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
|
Posted: Thu Feb 12, 2004 4:38 pm Post subject: Re: Types incomplets |
|
|
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
|
Posted: Mon Feb 16, 2004 12:20 am Post subject: Re: Types incomplets |
|
|
"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
|
Posted: Mon Feb 16, 2004 9:54 am Post subject: Re: Types incomplets |
|
|
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
|
Posted: Mon Feb 16, 2004 10:18 am Post subject: Re: Types incomplets |
|
|
"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
|
Posted: Thu Feb 19, 2004 8:34 pm Post subject: Re: Types incomplets |
|
|
On Thu, 12 Feb 2004 16:05:33 +0100, Frédéric Mayot <toto (AT) toto (DOT) com>
wrote:
C'est la manière politiquement correcte de dire "unijambistes" ?
--
;-)
|
|
| Back to top |
|
 |
|