Problème de structure de structure en C

Problème de structure de structure en C - C - Programmation

Marsh Posté le 12-02-2004 à 18:04:24    

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
Reply

Marsh Posté le 12-02-2004 à 18:04:24   

Reply

Marsh Posté le 12-02-2004 à 18:08:44    

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 )-
Reply

Marsh Posté le 12-02-2004 à 18:10:47    

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

Reply

Marsh Posté le 12-02-2004 à 18:21:43    

ya quoi dans rdv.h ?

Reply

Marsh Posté le 12-02-2004 à 18:40:43    


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 */

Reply

Marsh Posté le 12-02-2004 à 18:45:08    

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

Reply

Marsh Posté le 12-02-2004 à 18:46:50    

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

Reply

Marsh Posté le 12-02-2004 à 18:49:48    

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

Reply

Marsh Posté le 12-02-2004 à 18:50:19    

et comment je vérifie ?

Reply

Marsh Posté le 12-02-2004 à 18:50:57    

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

Reply

Marsh Posté le 12-02-2004 à 18:50:57   

Reply

Marsh Posté le 12-02-2004 à 18:51:48    

gcc sous linux !
je vais regarder ca de plus pres

Reply

Marsh Posté le 12-02-2004 à 19:16:02    

gcc -E fichier.c | less

Reply

Marsh Posté le 12-02-2004 à 19:16:18    

Cricri_ a écrit :

vire le 2ème include <time.h>

rien à voir

Reply

Marsh Posté le 12-02-2004 à 19:23:34    

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

Reply

Marsh Posté le 12-02-2004 à 19:50:04    

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
Reply

Marsh Posté le 12-02-2004 à 19:51:57    

okay je vais essayé, merci du tuyaux

Reply

Marsh Posté le 12-02-2004 à 20:00:52    

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

Reply

Marsh Posté le 12-02-2004 à 20:25:43    

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
Reply

Marsh Posté le 12-02-2004 à 20:29:15    

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

Reply

Marsh Posté le 12-02-2004 à 20:33:48    

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
Reply

Marsh Posté le 12-02-2004 à 20:36:06    

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 ?

Reply

Marsh Posté le 12-02-2004 à 20:38:38    

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

Reply

Marsh Posté le 12-02-2004 à 20:41:52    

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 :/

Reply

Marsh Posté le 12-02-2004 à 20:42:56    

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

Reply

Marsh Posté le 12-02-2004 à 20:45:54    

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é...

Reply

Marsh Posté le 12-02-2004 à 20:49:55    

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

Reply

Marsh Posté le 12-02-2004 à 20:52:34    

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...

Reply

Marsh Posté le 12-02-2004 à 21:56:33    

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 ?

Reply

Marsh Posté le 12-02-2004 à 22:03:02    

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

Reply

Marsh Posté le 12-02-2004 à 22:04:41    

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
Reply

Marsh Posté le 12-02-2004 à 22:06:26    

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

Reply

Marsh Posté le 12-02-2004 à 22:08:01    

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 ?

Reply

Marsh Posté le 12-02-2004 à 22:09:48    

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

Reply

Marsh Posté le 12-02-2004 à 22:12:47    

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

Reply

Marsh Posté le 12-02-2004 à 22:14:19    

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

Reply

Marsh Posté le 12-02-2004 à 22:16:27    

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

Reply

Marsh Posté le 12-02-2004 à 22:19:26    

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

Reply

Marsh Posté le 12-02-2004 à 22:21:53    

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 ...

Reply

Marsh Posté le 12-02-2004 à 22:25:37    

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:

Reply

Marsh Posté le 12-02-2004 à 22:55:15    

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

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed