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

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°338052
Miles--Teg
Posté le 19-03-2003 à 23:23:11  profilanswer
 

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é.
mood
Publicité
Posté le 19-03-2003 à 23:23:11  profilanswer
 

n°338064
antp
Super Administrateur
Champion des excuses bidons
Posté le 19-03-2003 à 23:29:17  profilanswer
 

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
n°338173
Miles--Teg
Posté le 20-03-2003 à 08:51:02  profilanswer
 

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é.
n°338289
antp
Super Administrateur
Champion des excuses bidons
Posté le 20-03-2003 à 10:52:14  profilanswer
 

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
n°338472
Miles--Teg
Posté le 20-03-2003 à 13:53:50  profilanswer
 

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é.
n°340302
Miles--Teg
Posté le 22-03-2003 à 08:08:34  profilanswer
 

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

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

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

 

Sujets relatifs
Pb de mysql.sock, c'est résolu merciJava.lang.RunTime : marche, mais pas vraiment [résolu]
[mysql] Table crashée, REPAIR ? (résolu)[resolu] methode close pour fermer le programme
Sauvegarde de base de données (résolu)Problème de focus... [Résolu] -- Script à emporter tout chaud...
HELP : DEV C++ [ Linker error ] : undefined reference to 'WinMain@16'problème avec JTabbedPane [Résolu]
forum en PHP : problème de suivi des messages [résolu]parse error, unexpected T_CONCAT_EQUAL in....
Plus de sujets relatifs à : [C] parse error before '&' token [partiellement résolu]


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