Stuctures qui s'apellent mutuellement

Résolu
Daemonight Messages postés 40 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 29 décembre 2010 - 29 déc. 2010 à 11:18
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 - 29 déc. 2010 à 14:21
Bonjour à tous,

Ca fait un petit moment déjà que je me pose la question suivante : Comment faire pour que le code suivant fonctionne :
struct A
{
    int toto;
    B *p_B;
};

struct B
{
    int tata;
    A *p_A;
};


A la compilation, évidemment, j'ai une erreur parce que le type B dans
B *p_B;
n'est pas connu. Si j'inverse :

struct B
{
    int tata;
    A *p_A;
};

struct A
{
    int toto;
    B *p_B;
};


evidemment cette fois ci c'est
A *p_A;
qui génère une erreur car A n'est pas connu.

komenkonfé ? C'est possible au moins ?

Merci ! (et bonnes fêtes de fin d'années )

<----------------------------------------------->
On reconnait un bon developpeur au baobab qu'il a dans la main...

4 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
29 déc. 2010 à 11:51
@buno: Pas forcément, certains design pattern l'utilisent (visitor par exemple). Néanmoins, tu soulèves un point intéressant.

@Daemonight: Prédéclare ce qu'il faut:
struct A; // Forward declaration
struct B
{
    int tata;
    A *p_A;
};

struct A
{
    int toto;
    B *p_B;
};


________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
3
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
29 déc. 2010 à 11:34
Hello,
Généralement, ce genre de souci met l'accent sur un problème d'architecture.
As-tu vraiment besoin de ce pointage mutuel?

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
0
Daemonight Messages postés 40 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 29 décembre 2010 1
29 déc. 2010 à 13:26
Super merci ! J'aurai du penser à faire quelque chose dans ce goût là.

@Buno, en fait il s'agit à la base d'une structure qui possède, entre autre, un pointeur vers une liste chainée d'élément ... qui ont pour type cette même structure !

struct chlist_element
{
  chlist_element *next;
  node *data;
};

struct node
{
  int x;
  int y;
  int value;
  chlist_element *head_row;
  chlist_element *head_col;
};


sachant que j'ai un tableau de X*Y node.

<----------------------------------------------->
On reconnait un bon developpeur au baobab qu'il a dans la main...
0
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
29 déc. 2010 à 14:21
Dans ce cas là, on utilise la même classe.
struct A
{
int toto;
A *p_A;
};

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
0
Rejoignez-nous