Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1434 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Références croisées en C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Références croisées en C

n°1145583
_momone_
Posté le 10-07-2005 à 16:53:16  profilanswer
 

J'ai un problème en C:
Je dois créer deux structures, appelées A et B: A possède un membre de type B, et B possède un membre de type A *. Jusque là, tout va bien, je déclare A et B dans le même header. Maintenant, j'aimerais séparé ces deux structures dans deux fichiers différents. Donc voici ce que j'ai fait;

Code :
  1. //A.h
  2. #ifndef _A_H_
  3. #define _A_H_
  4. #include "B.h"
  5. typedef struct _A
  6. {
  7.    B b_member;
  8. } A;
  9. #endif


 

Code :
  1. //B.h
  2. #ifndef _B_H_
  3. #define _B_H_
  4. typedef struct _A A;
  5. typedef struct _B;
  6. {
  7.    A *a_pointer;
  8. } B;
  9. #endif


 
Mais lorsque je compile, le compilateur me renvoit l'erreur suivante: "redefinition of 'A'", ce qui est normal vu que après de l'#include, il y a deux "typedef struct _A A;" à la suite.
Comment je pourrais résoudre ce problème, sachant que j'aimerais éviter de tout mettre dans un seul fichier ou de passer par un troisième fichier?
 
Merci ;)


Message édité par _momone_ le 10-07-2005 à 16:54:43
mood
Publicité
Posté le 10-07-2005 à 16:53:16  profilanswer
 

n°1145609
kfman
Credo quia absurdum
Posté le 10-07-2005 à 17:22:58  profilanswer
 

Un extern ?

n°1145828
Sve@r
Posté le 10-07-2005 à 23:31:27  profilanswer
 

Tu as quasiment le même problème que pour décrire une structure pointant sur elle-même (liste chaînée). Il te faut déclarer la structure avant de la définir.
 
Dans une liste chaînée

Code :
  1. typedef struct s_liste {   // Ici la structure "s_liste" est connue
  2.     variable;
  3.     variable;
  4.     struct s_liste *next;  // Tu peux donc l'utiliser
  5. } t_liste;


 
Il te faut déclarer "struct _A" avant de la définir

Code :
  1. // A.h
  2. #ifndef _A_H_
  3. #define _A_H_
  4. #include "B.h"
  5. typedef struct _A
  6. {
  7.    B b_member;
  8. } A;
  9. #endif


 

Code :
  1. //B.h  
  2. #ifndef _B_H_
  3. #define _B_H_
  4. // Déclaration de la structure "_A"
  5. struct _A;
  6. typedef struct _B;
  7. {
  8.    struct _A *a_pointer;
  9. } B;
  10. #endif


 
Voilà. J'ai pas testé mais cela devrait fonctionner...
 
 


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1146405
Emmanuel D​elahaye
C is a sharp tool
Posté le 11-07-2005 à 14:51:40  profilanswer
 

_momone_ a écrit :

J'ai un problème en C


Ben oui, sinon, tu ne posterais pas là...

Citation :

Code :
  1. #ifndef _A_H_
  2. #define _A_H_




En dehors de qui a été dit, il ne faut pas utiliser d'identificateur commençant par _ suivit de _A-Z, car il sont réservés à l'implémentation.


#ifndef H_A
#define H_A


est correct (mais un peu court...)
 
http://mapage.noos.fr/emdel/codage.htm#nom_underscore
http://mapage.noos.fr/emdel/codage [...] ser_source


Message édité par Emmanuel Delahaye le 11-07-2005 à 14:52:57

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Références croisées en C

 

Sujets relatifs
[POO]Dépendances croisées?[Visual .Net] Références Vide sous SmartDevice Application
mettre des references dans une tableréférences, utilisation de sendAndLoad dans un constructeur
macro suppression de referencesréférences circulaires, ID ?
Modifier les references d'une mdb par un programme exterieurBouquins references pour debuter en JAVA
Activer les references avec une macro[VBA Excel] Problème avec les références
Plus de sujets relatifs à : Références croisées en C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR