[C] parse error before '&' token [partiellement résolu]

parse error before '&' token [partiellement résolu] [C] - C++ - Programmation

Marsh Posté le 19-03-2003 à 23:23:11    

Bonjour,
voilà l'erreur que j'obtiens en compilant le programme ci-dessous !!
- parse error before '&' token pour cette fonction :

Code :
  1. int Tete ( File f, int &nb) {
  2.   if ( f.nb_aj == f.nb_suppr ) {
  3.     /* La file est vide !!!! On ne peut pas récuperer l'elt de tete */
  4.     printf("\nLa file est vide !!!! On ne peut pas récuperer l'elt de tete !!\n" );
  5.     return 0;
  6.   }
  7.   else {
  8.    nb = f.tableau[f.debut_file];
  9.     return 1;
  10.   }
  11. }


 
 
 
l'appel étant dans le main :

Code :
  1. int main () {
  2.   int n, nb, x, i;
  3.   File f;
  4.   nb = -1;
  5.  
  6.   printf("\nOn va initialiser la file !!\n" );
  7.   printf("\nDonner n : " );
  8.   scanf("%d",&n);
  9.   Init ( &f , n );
  10.   printf("\nInitialisation terminée\n" );
  11.   printf("\nDonner x à ajouter : " );
  12.   scanf("%d",&x);
  13.   Ajouter_en_fin( &f , x );
  14.  
  15.   printf("\non a mis dans la file : %d\n",f.tableau[f.fin_file]);
  16.  
  17.   i = Tete ( f , &nb );
  18.  
  19.   printf("\nx=%d\n", nb);
  20.  
  21.   system("PAUSE" );
  22.   return 0;
  23. }


 
Je fais "&nb" pour pouvoir récuperer la valeur mise dans la file, tout en retournant un code d'erreur au cas où !!
 
 
 
sachant que file est une structure décalrée comme ceci :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct file {
  4.   int *tableau;
  5.   int debut_file;
  6.   int fin_file;
  7.   int nb_elt_max;
  8.   /* Pour savoir combien de fois on a ajouté et enlevé des éléments
  9.      au tableau */
  10.   int nb_suppr;
  11.   int nb_aj;
  12. };
  13. typedef struct file File;


 
Si une bonne âme comprenait ce qu'il ne vas pas ?? (c'est au niveau de la fonction Tete)
 
Au fait j'utilise dev-c++ avec gcc 3.2
 
Il s'en suis les erreurs suivantes sur les lignes qui suivent
 
`f' undeclared (first use in this function)
(Each undeclared identifier is reported only once
for each function it appears in.)
`nb' undeclared (first use in this function)
 
 
 
 
 
Voilà les autre fonctions, pour ceux qui veulent savoir que je fais !

Code :
  1. int Init ( File *f , int n ) {
  2.   f->tableau = (int *) malloc ( n*sizeof(int) );
  3.  
  4.   if ( f==NULL ) {
  5.     fprintf(stderr,"\nErreur lors du malloc de l'initialisation du tableau !!\n" );
  6.     return 0;
  7.   }
  8.   f->debut_file = 0;
  9.   f->fin_file = -1;
  10.   f->nb_elt_max = n;
  11.  
  12.   f->nb_suppr = 0;
  13.   f->nb_aj = 0;
  14.   return 1;
  15. }
  16. int Ajouter_en_fin ( File *f , int x ) {
  17.   int n_max;
  18.   /*  int deb_file, fin_file;*/
  19.   n_max = f->nb_elt_max;
  20.   /* Teste si la file f est pleine   */
  21.   if ( (f->nb_aj - f->nb_suppr)>=n_max ) {
  22.    
  23.     /* File Pleine !! */
  24.    
  25.     return 0;
  26.    
  27.     /* ************** */
  28.     /* faire malloc pour recreer une nouvelle file en recopiant
  29.        l'ancienne */
  30.    
  31.   }
  32.  
  33.   /* ********************************************* */
  34.   /* Si on est ici, c'est qu'on a une file où l'on
  35.      peut rajouter des éléments                    */
  36.  
  37.   f->nb_aj++;
  38.   if (f->nb_aj%n_max == 0) {
  39.     /* Erreur : file pleine !! */
  40.     printf("\nErreur : file pleine !!\n" );
  41.     return 0;
  42.   }
  43.   f->fin_file = f->nb_aj%n_max;
  44.   f->tableau[f->fin_file] = x;
  45.  
  46.   printf("\nici on a mis dans la file : %d\n",f->tableau[f->fin_file]);
  47.  
  48.   return 1;
  49. }


 
Merci @+
Miles


Message édité par Miles--Teg le 22-03-2003 à 17:57:01

---------------
Recherchez la liberté et devenez esclave de vos désirs. Recherchez la discipline et trouvez votre liberté.
Reply

Marsh Posté le 19-03-2003 à 23:23:11   

Reply

Marsh Posté le 19-03-2003 à 23:29:17    

int Tete ( File f, int &nb)
-> ça ne marche qu'en C++ et pas en C il me semble (ou peut-être en C99 ?)
et l'appel doit se faire par Tete(f, nb)
 
  int Tete ( File f, int *nb)
-> ça marche partout, et l'appel se fait là par Tete(f, &nb)
Par contre quand tu utilises la variable dans la fonction tu dois garder le * devant vu que c'est un pointeur


Message édité par antp le 19-03-2003 à 23:29:27

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 20-03-2003 à 08:51:02    

Merci, ca compile !!!!
Trop cool, mais maintenant, ce qui ne vas pas c'est que je ne modifie pas correctement la valeur de nb !!
j'ai une valeur énorme alors que je devrais avoir un 12 (vu que c'est ce que je rentre comme valeur pour nb !!)
Bon je vais regarder à la fac tout à l'heure !!
 
Mercie encore !
 
@+
Miles


---------------
Recherchez la liberté et devenez esclave de vos désirs. Recherchez la discipline et trouvez votre liberté.
Reply

Marsh Posté le 20-03-2003 à 10:52:14    

Si tu as pris la seconde solution; c'est peut-être que dans la fonction tu fais un truc pas bien avec tes pointeurs, genre oublier le "*" devant


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 20-03-2003 à 13:53:50    

En fait il s'agissait d'une erreur dans l'algorithme qui mettais un element en fin de file !!
Je l'ai corriger, et il ne me reste plus qu'à tester !
Je reboote sous linux, et je vous dis !
 
@+
Miles


---------------
Recherchez la liberté et devenez esclave de vos désirs. Recherchez la discipline et trouvez votre liberté.
Reply

Marsh Posté le 22-03-2003 à 08:08:34    

Voilà), j'ai modifer la fonction qui ajoutais en fin, car c'est elle qui faisait merder le tout !!
Regarder maintenant ce que ca donne :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct file {
  4.   int *tableau;
  5.   int debut_file;
  6.   int fin_file;
  7.   int nb_elt_max;
  8.   /* Pour savoir combien de fois on a ajouté et enlevé des éléments
  9.      au tableau */
  10.   int nb_suppr;
  11.   int nb_aj;
  12. };
  13. typedef struct file File;
  14. /* On inclue ici le fichier contenant les entêtes des fonctions */
  15. #include "tp1.h"
  16. /* ************************************* */
  17. /* Déclaration des fonctions elles mêmes */
  18. /* ************************************* */
  19. int Init ( File *f , int n ) {
  20.   f->tableau = (int *) malloc ( n*sizeof(int) );
  21.  
  22.   if ( f==NULL ) {
  23.     fprintf(stderr,"\nErreur lors du malloc de l'initialisation du tableau !!\n" );
  24.     return 0;
  25.   }
  26.   f->debut_file = 0;
  27.   f->fin_file = -1;
  28.   f->nb_elt_max = n;
  29.  
  30.   f->nb_suppr = 0;
  31.   f->nb_aj = 0;
  32.   return 1;
  33. }
  34. int Ajouter_en_fin ( File *f , int x ) {
  35.   int n_max;
  36.   int test;
  37.   n_max = f->nb_elt_max;
  38.   /* Teste si la file f est pleine   */
  39.   if ( (f->nb_aj - f->nb_suppr)>=n_max ) {
  40.    
  41.     /* File Pleine !! */
  42.      printf("\nLa file est pleine !! Erreur NIVEAU 1\n" );
  43.     return 0;
  44.    
  45.     /* ************** */
  46.     /* faire malloc pour recreer une nouvelle file en recopiant
  47.        l'ancienne */
  48.    
  49.   }
  50.  
  51.   /* ********************************************* */
  52.   /* Si on est ici, c'est qu'on a une file où l'on */
  53.   /* peut rajouter des éléments                    */
  54.   /* ********************************************* */
  55.  
  56.   test = f->nb_aj % n_max;
  57.   if ( f->nb_aj == 0 ) {
  58.     /* On n'a jamais ajouté d'élément auparavant */
  59.     f->tableau[0] = x;
  60.     f->nb_aj++;
  61.     f->fin_file++;
  62.     return 1;
  63.   }
  64.   if (test != 0 ) {
  65.     /* On a la position de dernier élément en position relative */
  66.     /* càd que si % renvoie 1, la position absolue est 0 (1-1)  */
  67.     f->tableau[test] = x;
  68.     f->nb_aj++;
  69.     f->fin_file = test;
  70.     return 1;
  71.   }
  72.   else {
  73.    
  74.     if ( f->nb_suppr == 0 ) {
  75.       /* Ereur, la file est pleine !! */
  76.       printf("\nLa file est pleine !! Erreur non détectée au début de la fonctin ajouter_en_fin !! Erreur NIVEAU 2\n" );
  77.       return 0;
  78.     }
  79.     else {
  80.       if ( test == f->debut_file ) {
  81. /* Ereur, la file est pleine !! */
  82. printf("\nLa file est pleine !! Erreur non détectée au début de la fonctin ajouter_en_fin !! Erreur NIVEAU 3\n" );
  83. return 0;
  84.       }
  85.       f->tableau[test] = x;
  86.       f->nb_aj++;
  87.       f->fin_file = test;
  88.       return 1;
  89.     }
  90.   }
  91. }
  92. int Tete ( File f , int *nb ) {
  93. printf("\nf.tableau[f.debut_file]=: %d\n",f.tableau[f.debut_file]);
  94.   if ( f.nb_aj == f.nb_suppr ) {
  95.     /* La file est vide !!!! On ne peut pas récuperer l'elt de tete */
  96.     printf("\nLa file est vide !!!! On ne peut pas récuperer l'elt de tete !!\n" );
  97.     return 0;
  98.   }
  99.   else {
  100.    *nb = f.tableau[f.debut_file];
  101.     return 1;
  102.   }
  103. }
  104. int Supprimer_tete ( File *f ) {
  105.   int n_max;
  106.   int test;
  107.   n_max = f->nb_elt_max;
  108.   /* Teste si la file f est vide */
  109.   if ( Est_Vide ( f ) ) {
  110.     printf("\nLa file est vide !! Je ne peut pas supprimer l'élément de tete !\n" );
  111.     return 0; /* La file est déjà vide !! */
  112.   }
  113.   /* ********************************************* */
  114.   /* Si on est ici, c'est qu'on a une file où l'on */
  115.   /* peut supprimer au moins 1 éléments            */
  116.   /* ********************************************* */
  117.  
  118.   /* test aura la position relative du dernier élément */
  119.   test = f->nb_aj % n_max;
  120. /* fonction pas finie !!! */
  121.    return 1;
  122. }
  123. int Detruit ( File *f ) {
  124. return 0;
  125. }
  126. int Est_vide ( File *f ) {
  127.   if ( f->nb_aj == f->nb_suppr )
  128.     return 1; /* La file est bien vide !! */
  129.   else
  130.     return 0; /* La file n'est pas vide !! */
  131. }
  132. int main () {
  133.   int n, nb, x, i;
  134.   File f;
  135.   nb = -1;
  136.   printf("\nx=%d\n", nb);
  137.   printf("\nOn va initialiser la file !!\n" );
  138.   printf("\nOn Donne n=3 " );
  139.   n=3;
  140.   /*  scanf("%d",&n);*/
  141.   Init ( &f , n );
  142.   printf("\nInitialisation terminée\n" );
  143.   for (i=1 ; i<=n+1 ; i++ ) {
  144.     printf("\nDonner x%d à ajouter : ",i);
  145.     scanf("%d",&x);
  146.     Ajouter_en_fin( &f , x );
  147.   }
  148.  
  149.   printf("\non a mis dans la file : %d\n",f.tableau[f.fin_file]);
  150.  
  151.   i = Tete ( f , &nb );
  152.   printf("\ni=%d", i);
  153.   printf("\nnb=%d", nb);
  154.   printf("\n" );
  155.   /*  system("PAUSE" );  
  156.    */
  157.   return 0;
  158. }


 
Bon je sais c'est long !
 
Mais ca marche !!
Il me reste à faire la fonction qui me supprime le 1er elt de la file !
Et ca, ca va pas être de la tarte !!
Je suis en train de plancher dessus, et c'est chiant !!
Si y a des idées dans vos esprits, je suis preneur !!
 
Merci @+
Miles


---------------
Recherchez la liberté et devenez esclave de vos désirs. Recherchez la discipline et trouvez votre liberté.
Reply

Sujets relatifs:

Leave a Replay

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