[C]Types qui se croisent ...

LocalStone Messages postés 514 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 1 mars 2009 - 17 janv. 2007 à 23:54
acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 - 20 janv. 2007 à 21:55
Bonsoir à tous,
Je suis suis en train de coder un petit projet en C pour l'école et je suis face à un problème ... J'ai deux fichiers struct1.h et struct2.h qui ont besoins l'un de l'autre car les structures définies dans ces 2 fichiers ont besoin de l'autre pour exister. Du coup ... Je sais pas du tout comment faire ... J'arrive pas à compiler puisque lors d'un include, l'autre include n'a pas pu être fait et du coup la compilation ne peut se faire puisque le type n'est pas défini ...
Voilà ... Et du coup, je sais pas quoi faire ! Et j'ai beau chercher sur le net, j'ai pas trouvé de solutions. Donc si quelqu'un peu m'aider, ce serait vraiment sympa !
Merci beaucoup !
L.S.

6 réponses

cs_vicenzo Messages postés 178 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 25 août 2010 1
18 janv. 2007 à 08:32
Bonjour,

As tu réellement besoin de cette dépendance croisée ? Ne peux tu pas gérer un seul header ?

Sinon quel sont les types que tu déclares ?

Vicenzo
0
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
18 janv. 2007 à 09:20
Salut,
Mets le code commun dans un troisième header, lui-même inclus par les deux autres. Avec un
#ifdef tata
#define tata
#else
... le code
#endif
pour éviter le double inclusion
0
LocalStone Messages postés 514 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 1 mars 2009
18 janv. 2007 à 09:34
En fait, y a pas vraiment de code commun à proprement parlé. Et oui, je suis obligé d'avoir 2 headers différents.
J'ai ça en fait :

Struct1.h

#ifndef __Struct1__

#define __Struct1__


#include "Struct2.h"

typedef struct sStruct1 *tStruct1;
struct sStruct1

{

    ...

    tStruct2 ExempleOfStruct2;

    ...

};


#endif

Struct2.h

#ifndef __Struct2__

#define __Struct2__


#include "Struct2.h"

typedef struct sStruct2 *tStruct1;
struct sStruct2

{

    ...

    tStruct1 ExempleOfStruct1;

    ...

};


#endif

Voilà ... Et c'est un problème ...

LocalStone
0
LocalStone Messages postés 514 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 1 mars 2009
18 janv. 2007 à 09:36
Dans struct2.h, c'est #include "struct1.h" ... Faute de frappe
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
20 janv. 2007 à 21:53
salut

il y a une 2ieme faut de frappe dans struct2.h:
typedef struct sStruct2 *tStruct2;
   et pas
typedef struct sStruct2 *tStruct1;

car sinon ce n'est pas une dépendance croisée

en C il faut faire

typedef struct a a;
typedef struct b b;
struct a {
   b *p;
};
struct b {
   a *p;
};

le typedef permet la dépendance croisée car le typedef c'est un peu comme déclarer la structure avant de la définir, en plus de servir aussi comme une forme de macro

en C++ la déclaration de class et de struct existe:

class a;
class b;
class a {
   b *p;
};
class b {
   a *p;
};

et ça permet donc de la même façon la dépendance croisée

a+
0
acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
20 janv. 2007 à 21:55
ha et je voulais rajouter que les    typedef type1* type2;   c'est mal car après on ne reconnait plus les pointeurs des autres variables
0
Rejoignez-nous