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

  FORUM HardWare.fr
  Programmation
  C

  Problème de structure de structure en C

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Problème de structure de structure en C

n°640751
Khyna
Posté le 12-02-2004 à 18:04:24  profilanswer
 

Bonjour,
J'ai un problèmes de structure de strucure dans mon code.
Qd je veux faire une structure en utilisant une autre structure ca marche pas.
Qd je fais exactement la meme chose en précisant que c un pointeur ca marche.
Je vois pas d'ou vient le probleme.
Voici le code qui me met une erreur a la compilation :
 

Code :
  1. #include "rdv.h"
  2. #include <time.h>
  3. struct rdvAgenda {
  4.   struct rdv leRdv;// le rdv.
  5.   struct rdvAgenda *leRdvAgendaSuivant;// un pointeur sur le rdv suivant.
  6. };
  7. struct jour {
  8.   struct tm dateDuJour;// la date du jour.
  9.   struct rdvAgenda *unRdvAgenda;// un poiteur le premier rendez-vous du jour.
  10.   struct jour *jourSuivant;// un pointeur sur le jour suivant.
  11. };


Voici l'erreur :

Citation :

agenda.h:9: error: field `leRdv' has incomplete type


 
Voici le code qui marche :

Code :
  1. #include "rdv.h"
  2. #include <time.h>
  3. struct rdvAgenda {
  4.   struct rdv *leRdv;// un pointeur sur le rdv.
  5.   struct rdvAgenda *leRdvAgendaSuivant;// un pointeur sur le rdv suivant.
  6. };
  7. struct jour {
  8.   struct tm dateDuJour;// la date du jour.
  9.   struct rdvAgenda *unRdvAgenda;// un poiteur le premier rendez-vous du jour.
  10.   struct jour *jourSuivant;// un pointeur sur le jour suivant.
  11. };


 
Ce dernier code marche.
 
Je me doit de signaler que qd je met en dure ( sans utiliser l'include "rdv.h" ) la structure rdv :

Code :
  1. struct rdv {
  2.   struct tm dateDebut;
  3.   struct tm dateFin;
  4.   char libelle[100];
  5. };


et benh tout marche bien ...
 
 
Dons je pense que c'est un probleme de lien entre fichier mais, je ne voit pas pourquoi il reconnait un pointeur d'un type alors qu'il ne reconnait pas ce pointeur de type.
 
Voila, merci de me dépanner


Message édité par Khyna le 12-02-2004 à 18:05:45
mood
Publicité
Posté le 12-02-2004 à 18:04:24  profilanswer
 

n°640755
blackgodde​ss
vive le troll !
Posté le 12-02-2004 à 18:08:44  profilanswer
 

essaye en mettant  

Code :
  1. #include <time.h>
  2. #include "rdv.h"


au lieu de  

Code :
  1. #include "rdv.h"
  2. #include <time.h>


 
(j'imagine que struct tm est déclaré dans time.h ?)


---------------
-( BlackGoddess )-
n°640760
Khyna
Posté le 12-02-2004 à 18:10:47  profilanswer
 

meme erreur
 
struct tm est bien déclaré dans time.h

n°640768
Taz
bisounours-codeur
Posté le 12-02-2004 à 18:21:43  profilanswer
 

ya quoi dans rdv.h ?

n°640784
Khyna
Posté le 12-02-2004 à 18:40:43  profilanswer
 


Code :
  1. #ifndef RDV_H
  2. #define RDV_H
  3. #include <time.h>
  4. #include <stdio.h>
  5. struct rdv {
  6.   struct tm dateDebut;
  7.   struct tm dateFin;
  8.   char libelle[100];
  9. };
  10. FILE *monFichier;
  11. int writeRDV(struct rdv*);
  12. int readRDV(struct rdv*, int);
  13. int initializeFile(char [100]);
  14. int closeFile();
  15. int eof();
  16. #endif /* RDV_H */

n°640785
Taz
bisounours-codeur
Posté le 12-02-2004 à 18:45:08  profilanswer
 

déjà mets un vrai motif bien compliqué plutot que RDV_H
le FILE* déclaré comme ça, ça va poser des problèmes
 
char [100] ne sert à rien, const char* serait peut être mieux senti
 
 
sinon chez moi ça marche

n°640786
Khyna
Posté le 12-02-2004 à 18:46:50  profilanswer
 

ben je veux bien croire que ca marche chez toi mais est ce que ca peut venir de mon compilateur ?

n°640787
Taz
bisounours-codeur
Posté le 12-02-2004 à 18:49:48  profilanswer
 

vérifies que ton .h est réellement inclus

n°640788
Khyna
Posté le 12-02-2004 à 18:50:19  profilanswer
 

et comment je vérifie ?

n°640789
cricri_
Posté le 12-02-2004 à 18:50:57  profilanswer
 

vire le 2ème include <time.h>, celui du .c peut-être ?
zarbi tout de même ...
c'est quoi ton compilo ? plateforme ?

mood
Publicité
Posté le 12-02-2004 à 18:50:57  profilanswer
 

n°640791
Khyna
Posté le 12-02-2004 à 18:51:48  profilanswer
 

gcc sous linux !
je vais regarder ca de plus pres

n°640818
Taz
bisounours-codeur
Posté le 12-02-2004 à 19:16:02  profilanswer
 

gcc -E fichier.c | less

n°640819
Taz
bisounours-codeur
Posté le 12-02-2004 à 19:16:18  profilanswer
 

Cricri_ a écrit :

vire le 2ème include <time.h>

rien à voir

n°640834
Khyna
Posté le 12-02-2004 à 19:23:34  profilanswer
 

je vous remercie, je vais une petite sieste et je regarderais ca avec un nouvelle oeil dans 2 heures, a mon avis, j'espere que je verais ce qui ne vas pas

n°640873
Dav Vador
Posté le 12-02-2004 à 19:50:04  profilanswer
 

En fait pour faire une struct contenant une struct du même type il faut faire :
 

Code :
  1. typedef struct _rdvAgenda {
  2.    
  3.       struct rdv *leRdv;// un pointeur sur le rdv.
  4.       struct _rdvAgenda leRdvAgendaSuivant;// un pointeur sur le rdv suivant.
  5.   } rdvAgenda;


 
Edit:
Bon c'est pas ça, je cherche :D
 
Edit2: J'avais rien compris :lol:


Message édité par Dav Vador le 12-02-2004 à 20:37:47
n°640877
Khyna
Posté le 12-02-2004 à 19:51:57  profilanswer
 

okay je vais essayé, merci du tuyaux

n°640893
Taz
bisounours-codeur
Posté le 12-02-2004 à 20:00:52  profilanswer
 

euh non, ton truc ne fait rien du tout, y a juste un typedef en pkus, et toujours 2 pointeurs

n°640922
Dav Vador
Posté le 12-02-2004 à 20:25:43  profilanswer
 

taz a écrit :

euh non, ton truc ne fait rien du tout, y a juste un typedef en pkus, et toujours 2 pointeurs

Exact je me suis planté :D
Je cherche ds mes anciens cours, il me semble que ça ressembait à ce que j'ai donné, avec un typedef et sans le pteur biensur...


Message édité par Dav Vador le 12-02-2004 à 20:26:07
n°640925
Taz
bisounours-codeur
Posté le 12-02-2004 à 20:29:15  profilanswer
 

la vérité est que ce code ne pose aucun problème :o

n°640928
Dav Vador
Posté le 12-02-2004 à 20:33:48  profilanswer
 

taz a écrit :

la vérité est que ce code ne pose aucun problème :o

Oua pt1 je viens de comprendre :pt1cable:  :lol:  
 
 
Je croyais qu'il voulait faire compiler ça :
 

Code :
  1. struct rdvAgenda {
  2.        
  3.           struct rdv *leRdv;// un pointeur sur le rdv.
  4.           struct rdvAgenda leRdvAgendaSuivant;// un pointeur sur le rdv suivant.
  5.     };


 
 
(et en fait c'est pas possible, il faut un pteur sur rdvAgenda, j'ai trouvé ds mon vieux cours :D)
 
 
 
Bon j'arrête la moquette [:aras qui rit]


Message édité par Dav Vador le 12-02-2004 à 20:39:28
n°640931
Dav Vador
Posté le 12-02-2004 à 20:36:06  profilanswer
 

Bon alors, maintenant que j'ai compris, si tu mets :
 

Code :
  1. struct rdv;


juste avant de déclarer ta strcuture struct rdvAgenda, ça marcherait pas ?

n°640933
Taz
bisounours-codeur
Posté le 12-02-2004 à 20:38:38  profilanswer
 

Dav Vador a écrit :

Bon alors, maintenant que j'ai compris, si tu mets :
 

Code :
  1. struct rdv;


juste avant de déclarer ta strcuture struct rdvAgenda, ça marcherait pas ?

pas besoin de foward déclaration, y a pas de référencement cyclique

n°640939
Dav Vador
Posté le 12-02-2004 à 20:41:52  profilanswer
 

taz a écrit :

pas besoin de foward déclaration, y a pas de référencement cyclique

Ben ouais mais là le compilo voit pas la struct apparement [:spamafote]  
Donc c'était pour le forcer à la reconnaitre...
Mais doit y'avoir une couille ailleurs car ça devrait marcher normalement :/

n°640940
Taz
bisounours-codeur
Posté le 12-02-2004 à 20:42:56  profilanswer
 

d'où mes premiers conseils et ma dernière question

n°640944
Dav Vador
Posté le 12-02-2004 à 20:45:54  profilanswer
 

taz a écrit :

d'où mes premiers conseils et ma dernière question

En effet :D
 
Sinon pour tester si le .h est bien inclus, y'a qu'à marqué un truc à la con qui compile pas en plein milieu et il sera vite fixé...

n°640948
Taz
bisounours-codeur
Posté le 12-02-2004 à 20:49:55  profilanswer
 

ou juste regarder la sortie de cpp comme déjà indiqué

n°640950
Dav Vador
Posté le 12-02-2004 à 20:52:34  profilanswer
 

taz a écrit :

ou juste regarder la sortie de cpp comme déjà indiqué

C'était juste pour donner une autre méthode :whistle:  
 
Bon j'arrête mes conneries, ça vaudra mieux...

n°640979
Khyna
Posté le 12-02-2004 à 21:56:33  profilanswer
 

Ca marche chez mon pote, c surement mon compilateur...
Je sais ps de tout de facon je vais réinstaller mon système donc je verais ca apres.  
 
Par contre, taz ? porquoi il ne faut pas que que ke déclare FILE * ?
Comment je peux faire autrement ?

n°640987
Taz
bisounours-codeur
Posté le 12-02-2004 à 22:03:02  profilanswer
 

il faut que tu le déclares extern dans ton .h et que tu en face l'allocation (automatique dans un .c)

n°640989
Khyna
Posté le 12-02-2004 à 22:04:41  profilanswer
 

bah je croyais que ca se faisait automatiquement pour un FILE ?
et le externe servirait a ce qu'il soit visible des autres fichiers ?
et je lui alloue quoi dans ses cas la ?


Message édité par Khyna le 12-02-2004 à 22:05:04
n°640993
Taz
bisounours-codeur
Posté le 12-02-2004 à 22:06:26  profilanswer
 

ben vas y, laisse comme ça, compile ton projet, et quand t'auras inclus plusieurs fois ton fichier, tu reviendras m'en parler quand t'auras des erreurs de link

n°640995
Khyna
Posté le 12-02-2004 à 22:08:01  profilanswer
 

Nan mais je veux bien te croire car j'ai des pb maintenant que j'ai plusieurs fichiers, mais qu'est ce que je lui alloue ?

n°640999
Taz
bisounours-codeur
Posté le 12-02-2004 à 22:09:48  profilanswer
 

ben tu fais une allocation automatique, c'est dire rien si ce n'est pas déclarer extern puis la définir ailleurs dans un .c

n°641004
Khyna
Posté le 12-02-2004 à 22:12:47  profilanswer
 

:ouch: hein ?!!? pas compris la ...(je débute doucement stp..)

n°641006
Taz
bisounours-codeur
Posté le 12-02-2004 à 22:14:19  profilanswer
 

déclaration  
 
extern int globale;
 
définition
 
int globale = <valeur initiale>;

n°641009
Khyna
Posté le 12-02-2004 à 22:16:27  profilanswer
 

déclaration :
 
extern FILE *monFichier;
 
définition :
 
monFichier = fopen(nomFichier,"r+" );
ca c bon normalemnt alors ?

n°641012
Khyna
Posté le 12-02-2004 à 22:19:26  profilanswer
 

Maintenant ca compile plus, j'ai plein de  
undefined reference to `monFichier'

n°641016
Taz
bisounours-codeur
Posté le 12-02-2004 à 22:21:53  profilanswer
 

khyna a écrit :

Maintenant ca compile plus, j'ai plein de  
undefined reference to `monFichier'
 

le copier/coller c'e'st pas ton truc toi ...

n°641024
Khyna
Posté le 12-02-2004 à 22:25:37  profilanswer
 

c ironique ou tu veux que je te mette ce que le compilateur m'hurle :

Citation :

/home/khyna/tmp/ccOksf2H.o(.text+0x3e): In function `readDateDebut':
: undefined reference to `monFichier'
/home/khyna/tmp/ccOksf2H.o(.text+0x57): In function `readDateDebut':
: undefined reference to `monFichier'
/home/khyna/tmp/ccOksf2H.o(.text+0x6c): In function `readDateDebut':
: undefined reference to `monFichier'
/home/khyna/tmp/ccOksf2H.o(.text+0x325): In function `readDateFin':
: undefined reference to `monFichier'
/home/khyna/tmp/ccOksf2H.o(.text+0x33e): In function `readDateFin':
: undefined reference to `monFichier'
/home/khyna/tmp/ccOksf2H.o(.text+0x353): more undefined references to `monFichier' follow
collect2: ld returned 1 exit status

:kaola:

n°641048
Taz
bisounours-codeur
Posté le 12-02-2004 à 22:55:15  profilanswer
 

non spa ironique, je suis très sérieux

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

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

  Problème de structure de structure en C

 

Sujets relatifs
probleme de formulaire..problème avec PHP4 et apache
[PHP] Problème updateApplet : Probleme graphique entre JV Microsoft et JV SUN
Problème video + mouselistener[JAVA]Probleme de Thread
Probleme dans le web.xmlpseudo-frame en PHP, probléme
Problème requête SQL (Ms SQL 2000)problème avec smtp
Plus de sujets relatifs à : Problème de structure de structure en C


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