dans la définition de la classe A, il y a un objet B.
dans la definition de la classe B, il y a un objet C.
dans la definition de la classe C, il y a un objet B.
voila en gros :
A.h
#include "B.h"
class A
{
public:
B b;
};
B.h
#include "C.h"
class B
{
public:
C c;
};
C.h
#include "B.h"
class C
{
public:
B b;
};
j'ai tout encadré avec des #ifndef et #define pour pas que ce soit
recursif...
mais bon, comment faire pour que lorsque l'on arrive à l'analyse du
fichier C.h ( en passant par A.h puis B.h ), la classe B soit définie ?
j'ai tout encadré avec des #ifndef et #define pour pas que ce soit recursif...
Ca limite la casse, mais il faut quand même résoudre le problème quand il y a un cycle !
Solution : Utiliser des déclaration de classes partielles :
Class A; typedef A* ptrA;
(Que tu peux placer au dessus de la protection par #ifdef de A.h, ou en haut du fichier où tu l'utilises, ou bien dans un fichier à part, du style A-partial.h)
Ensuite, bien sur, tu ne peux pas utiliser les méthodes ou attributs de A, et tu ne peux pas faire grand chose avec A lui-même vu que le compilateur ne connait pas sa taille, mais tu peux utilser ptrA sans problème.
(De toutes façons, avec ton truc cyclique, il faut bien qu'il y ai un pointeur quelque part, sinon, tu vas jouer aux poupées russes !!)
j'ai tout encadré avec des #ifndef et #define pour pas que ce soit
recursif...
Ca limite la casse, mais il faut quand même résoudre le problème quand
il y a un cycle !
Solution : Utiliser des déclaration de classes partielles :
Class A;
typedef A* ptrA;
(Que tu peux placer au dessus de la protection par #ifdef de A.h, ou
en haut du fichier où tu l'utilises, ou bien dans un fichier à part,
du style A-partial.h)
Ensuite, bien sur, tu ne peux pas utiliser les méthodes ou attributs
de A, et tu ne peux pas faire grand chose avec A lui-même vu que le
compilateur ne connait pas sa taille, mais tu peux utilser ptrA sans
problème.
(De toutes façons, avec ton truc cyclique, il faut bien qu'il y ai un
pointeur quelque part, sinon, tu vas jouer aux poupées russes !!)
j'ai tout encadré avec des #ifndef et #define pour pas que ce soit recursif...
Ca limite la casse, mais il faut quand même résoudre le problème quand il y a un cycle !
Solution : Utiliser des déclaration de classes partielles :
Class A; typedef A* ptrA;
(Que tu peux placer au dessus de la protection par #ifdef de A.h, ou en haut du fichier où tu l'utilises, ou bien dans un fichier à part, du style A-partial.h)
Ensuite, bien sur, tu ne peux pas utiliser les méthodes ou attributs de A, et tu ne peux pas faire grand chose avec A lui-même vu que le compilateur ne connait pas sa taille, mais tu peux utilser ptrA sans problème.
(De toutes façons, avec ton truc cyclique, il faut bien qu'il y ai un pointeur quelque part, sinon, tu vas jouer aux poupées russes !!)
-- Matthieu
Fabien LE LEZ
On Wed, 04 Feb 2004 17:15:21 +0100, Xavier Seneque wrote:
B.h #include "C.h" class B { public: C c; };
Donc B est plus grand que C, puisque un B contient un C.
C.h #include "B.h" class C { public: B b; };
Donc C est plus grand que B, puisque un C contient un B.
N'y aurait-il pas une légère contradiction ?
-- ;-)
On Wed, 04 Feb 2004 17:15:21 +0100, Xavier Seneque
<xavier.seneque@wanadoo.fr> wrote:
B.h
#include "C.h"
class B
{
public:
C c;
};
Donc B est plus grand que C, puisque un B contient un C.
C.h
#include "B.h"
class C
{
public:
B b;
};
Donc C est plus grand que B, puisque un C contient un B.
On Wed, 04 Feb 2004 17:15:21 +0100, Xavier Seneque wrote:
B.h #include "C.h" class B { public: C c; };
Donc B est plus grand que C, puisque un B contient un C.
C.h #include "B.h" class C { public: B b; };
Donc C est plus grand que B, puisque un C contient un B.
N'y aurait-il pas une légère contradiction ?
-- ;-)
Régis Troadec
Salut,
"Xavier Seneque" a écrit dans le message de news: bvr5r0$p6q$
Bonjour,
j'ai 3 classes : A, B et C
dans la définition de la classe A, il y a un objet B. dans la definition de la classe B, il y a un objet C. dans la definition de la classe C, il y a un objet B.
voila en gros : A.h #include "B.h" class A { public: B b; };
B.h #include "C.h" class B { public: C c; };
C.h #include "B.h" class C { public: B b; };
j'ai tout encadré avec des #ifndef et #define pour pas que ce soit recursif...
mais bon, comment faire pour que lorsque l'on arrive à l'analyse du fichier C.h ( en passant par A.h puis B.h ), la classe B soit définie ?
Utilise des déclarations anticipées de classes (valable uniquement avec des pointeurs, ce qui est logique) et descends tes en-têtes dans des fichiers de définition (fais en si tu ne l'as pas fait).
// A.h
class B; // dans A.cpp, #include "B.h"
class A { public: A(); B * ptrB; virtual ~A(); };
// B.h
class C; // dans B.cpp, #include "C.h"
class B { public: B(); C * ptrC; virtual ~B(); };
// C.h
class B; // dans C.cpp, #include "B.h"
class C { public: C(); B * ptrB; virtual ~C(); };
a+, Regis
Salut,
"Xavier Seneque" <xavier.seneque@wanadoo.fr> a écrit dans le message de
news: bvr5r0$p6q$1@news-reader5.wanadoo.fr...
Bonjour,
j'ai 3 classes : A, B et C
dans la définition de la classe A, il y a un objet B.
dans la definition de la classe B, il y a un objet C.
dans la definition de la classe C, il y a un objet B.
voila en gros :
A.h
#include "B.h"
class A
{
public:
B b;
};
B.h
#include "C.h"
class B
{
public:
C c;
};
C.h
#include "B.h"
class C
{
public:
B b;
};
j'ai tout encadré avec des #ifndef et #define pour pas que ce soit
recursif...
mais bon, comment faire pour que lorsque l'on arrive à l'analyse du
fichier C.h ( en passant par A.h puis B.h ), la classe B soit définie ?
Utilise des déclarations anticipées de classes (valable uniquement avec des
pointeurs, ce qui est logique) et descends tes en-têtes dans des fichiers de
définition (fais en si tu ne l'as pas fait).
"Xavier Seneque" a écrit dans le message de news: bvr5r0$p6q$
Bonjour,
j'ai 3 classes : A, B et C
dans la définition de la classe A, il y a un objet B. dans la definition de la classe B, il y a un objet C. dans la definition de la classe C, il y a un objet B.
voila en gros : A.h #include "B.h" class A { public: B b; };
B.h #include "C.h" class B { public: C c; };
C.h #include "B.h" class C { public: B b; };
j'ai tout encadré avec des #ifndef et #define pour pas que ce soit recursif...
mais bon, comment faire pour que lorsque l'on arrive à l'analyse du fichier C.h ( en passant par A.h puis B.h ), la classe B soit définie ?
Utilise des déclarations anticipées de classes (valable uniquement avec des pointeurs, ce qui est logique) et descends tes en-têtes dans des fichiers de définition (fais en si tu ne l'as pas fait).
// A.h
class B; // dans A.cpp, #include "B.h"
class A { public: A(); B * ptrB; virtual ~A(); };
// B.h
class C; // dans B.cpp, #include "C.h"
class B { public: B(); C * ptrC; virtual ~B(); };
// C.h
class B; // dans C.cpp, #include "B.h"
class C { public: C(); B * ptrB; virtual ~C(); };
a+, Regis
Horst Kraemer
On Wed, 04 Feb 2004 17:15:21 +0100, Xavier Seneque wrote:
Bonjour,
j'ai 3 classes : A, B et C
dans la définition de la classe A, il y a un objet B. dans la definition de la classe B, il y a un objet C. dans la definition de la classe C, il y a un objet B.
C'est une construction impossible.
Pour calculer la taille de B le combilateur doit connaitre la taille de C parce que B contient un C.
Pour calculer la taille de C le combilateur doit connaitre la taille de B parce que C contient un B.
Pour calculer la taille de B le combilateur doit connaitre la taille de C parce que B contient un C.
Pour calculer la taille de C le combilateur doit connaitre la taille de B parce que C contient un B.
Pour calculer la taille de B le combilateur doit connaitre la taille de C parce que B contient un C.
Pour calculer la taille de C le combilateur doit connaitre la taille de B parce que C contient un B.
A suivre...
Au moins une des classe ne peut contenir qu'une réference à ou un pointeur vers un objet de l'autre classe.
struct C; // déclaration incomplète pour pouvoir déclarer un C*
struct B { C* pc; };
struct C { B b: // où B* pb; };
La différence est qu'ici le compilateur connait la taille d'un C* qui est indépendante de la taille future de C.
-- Horst
On Wed, 04 Feb 2004 17:15:21 +0100, Xavier Seneque
<xavier.seneque@wanadoo.fr> wrote:
Bonjour,
j'ai 3 classes : A, B et C
dans la définition de la classe A, il y a un objet B.
dans la definition de la classe B, il y a un objet C.
dans la definition de la classe C, il y a un objet B.
C'est une construction impossible.
Pour calculer la taille de B le combilateur doit connaitre la taille
de C parce que B contient un C.
Pour calculer la taille de C le combilateur doit connaitre la taille
de B parce que C contient un B.
Pour calculer la taille de B le combilateur doit connaitre la taille
de C parce que B contient un C.
Pour calculer la taille de C le combilateur doit connaitre la taille
de B parce que C contient un B.
Pour calculer la taille de B le combilateur doit connaitre la taille
de C parce que B contient un C.
Pour calculer la taille de C le combilateur doit connaitre la taille
de B parce que C contient un B.
A suivre...
Au moins une des classe ne peut contenir qu'une réference à ou un
pointeur vers un objet de l'autre classe.
struct C; // déclaration incomplète pour pouvoir déclarer un C*
struct B
{
C* pc;
};
struct C
{
B b: // où B* pb;
};
La différence est qu'ici le compilateur connait la taille d'un C* qui
est indépendante de la taille future de C.
On Wed, 04 Feb 2004 17:15:21 +0100, Xavier Seneque wrote:
Bonjour,
j'ai 3 classes : A, B et C
dans la définition de la classe A, il y a un objet B. dans la definition de la classe B, il y a un objet C. dans la definition de la classe C, il y a un objet B.
C'est une construction impossible.
Pour calculer la taille de B le combilateur doit connaitre la taille de C parce que B contient un C.
Pour calculer la taille de C le combilateur doit connaitre la taille de B parce que C contient un B.
Pour calculer la taille de B le combilateur doit connaitre la taille de C parce que B contient un C.
Pour calculer la taille de C le combilateur doit connaitre la taille de B parce que C contient un B.
Pour calculer la taille de B le combilateur doit connaitre la taille de C parce que B contient un C.
Pour calculer la taille de C le combilateur doit connaitre la taille de B parce que C contient un B.
A suivre...
Au moins une des classe ne peut contenir qu'une réference à ou un pointeur vers un objet de l'autre classe.
struct C; // déclaration incomplète pour pouvoir déclarer un C*
struct B { C* pc; };
struct C { B b: // où B* pb; };
La différence est qu'ici le compilateur connait la taille d'un C* qui est indépendante de la taille future de C.
-- Horst
Régis Troadec
"Horst Kraemer" a écrit dans le message de news:
On Wed, 04 Feb 2004 17:15:21 +0100, Xavier Seneque wrote:
Bonjour,
j'ai 3 classes : A, B et C
dans la définition de la classe A, il y a un objet B. dans la definition de la classe B, il y a un objet C. dans la definition de la classe C, il y a un objet B.
C'est une construction impossible.
Chut !!! c'est la surprise !
"Horst Kraemer" <horst.kraemer@epost.de> a écrit dans le message de news:
8b4320pnd1enfrp7fcrftu9ohgb8133s3f@4ax.com...
On Wed, 04 Feb 2004 17:15:21 +0100, Xavier Seneque
<xavier.seneque@wanadoo.fr> wrote:
Bonjour,
j'ai 3 classes : A, B et C
dans la définition de la classe A, il y a un objet B.
dans la definition de la classe B, il y a un objet C.
dans la definition de la classe C, il y a un objet B.
On Wed, 04 Feb 2004 17:15:21 +0100, Xavier Seneque wrote:
Bonjour,
j'ai 3 classes : A, B et C
dans la définition de la classe A, il y a un objet B. dans la definition de la classe B, il y a un objet C. dans la definition de la classe C, il y a un objet B.
C'est une construction impossible.
Chut !!! c'est la surprise !
kanze
Fabien LE LEZ wrote in message news:...
On Wed, 04 Feb 2004 17:15:21 +0100, Xavier Seneque wrote:
B.h #include "C.h" class B { public: C c; };
Donc B est plus grand que C, puisque un B contient un C.
C.h #include "B.h" class C { public: B b; };
Donc C est plus grand que B, puisque un C contient un B.
N'y aurait-il pas une légère contradiction ?
Seulement si la taille des objets est finie. Si la taille de B et de C est infinie, pas de problème.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Fabien LE LEZ <gramster@gramster.com> wrote in message
news:<ksf22092g96t7v4bkqh5m51b7q7quel25k@4ax.com>...
On Wed, 04 Feb 2004 17:15:21 +0100, Xavier Seneque
<xavier.seneque@wanadoo.fr> wrote:
B.h
#include "C.h"
class B
{
public:
C c;
};
Donc B est plus grand que C, puisque un B contient un C.
C.h
#include "B.h"
class C
{
public:
B b;
};
Donc C est plus grand que B, puisque un C contient un B.
N'y aurait-il pas une légère contradiction ?
Seulement si la taille des objets est finie. Si la taille de B et de C
est infinie, pas de problème.
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
On Wed, 04 Feb 2004 17:15:21 +0100, Xavier Seneque wrote:
B.h #include "C.h" class B { public: C c; };
Donc B est plus grand que C, puisque un B contient un C.
C.h #include "B.h" class C { public: B b; };
Donc C est plus grand que B, puisque un C contient un B.
N'y aurait-il pas une légère contradiction ?
Seulement si la taille des objets est finie. Si la taille de B et de C est infinie, pas de problème.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Fabien LE LEZ
On 5 Feb 2004 00:56:52 -0800, wrote:
Seulement si la taille des objets est finie. Si la taille de B et de C est infinie, pas de problème.
Tiens oui, je n'y avais pas pensé. On devrait utiliser plus souvent des objets de taille infinie, ça simplifie bien des problèmes...
-- ;-)
On 5 Feb 2004 00:56:52 -0800, kanze@gabi-soft.fr wrote:
Seulement si la taille des objets est finie. Si la taille de B et de C
est infinie, pas de problème.
Tiens oui, je n'y avais pas pensé. On devrait utiliser plus souvent
des objets de taille infinie, ça simplifie bien des problèmes...
Seulement si la taille des objets est finie. Si la taille de B et de C est infinie, pas de problème.
Tiens oui, je n'y avais pas pensé. On devrait utiliser plus souvent des objets de taille infinie, ça simplifie bien des problèmes...
Ouah, et je te dis pas... le rapport qualité/prix !!
--
Français *==> "Musique renaissance" <==* English midi - facsimiles - ligatures - mensuration http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/ Alain Naigeon - - Strasbourg, France
Jean-Marc Bourguet
Fabien LE LEZ writes:
On 5 Feb 2004 00:56:52 -0800, wrote:
Seulement si la taille des objets est finie. Si la taille de B et de C est infinie, pas de problème.
Tiens oui, je n'y avais pas pensé. On devrait utiliser plus souvent des objets de taille infinie, ça simplifie bien des problèmes...
Si les objets sont de tailles nulles, il n'y a pas non plus de problemes.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Fabien LE LEZ <gramster@gramster.com> writes:
On 5 Feb 2004 00:56:52 -0800, kanze@gabi-soft.fr wrote:
Seulement si la taille des objets est finie. Si la taille de B et de C
est infinie, pas de problème.
Tiens oui, je n'y avais pas pensé. On devrait utiliser plus souvent
des objets de taille infinie, ça simplifie bien des problèmes...
Si les objets sont de tailles nulles, il n'y a pas non plus de
problemes.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Seulement si la taille des objets est finie. Si la taille de B et de C est infinie, pas de problème.
Tiens oui, je n'y avais pas pensé. On devrait utiliser plus souvent des objets de taille infinie, ça simplifie bien des problèmes...
Si les objets sont de tailles nulles, il n'y a pas non plus de problemes.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Fabien LE LEZ
On 06 Feb 2004 09:00:28 +0100, Jean-Marc Bourguet wrote:
Si les objets sont de tailles nulles, il n'y a pas non plus de problemes.
Ou plus généralement, si un objet contenant un autre objet a la taille de l'objet contenu.
-- ;-)
On 06 Feb 2004 09:00:28 +0100, Jean-Marc Bourguet <jm@bourguet.org>
wrote:
Si les objets sont de tailles nulles, il n'y a pas non plus de
problemes.
Ou plus généralement, si un objet contenant un autre objet a la taille
de l'objet contenu.