bonjour,
j'ai le message d'erreur suivant:
Code:
1
2 src/Bmp\Anim1.h:1: error: syntax error before "char"
et si je supprimer l'unsigned de la déclaration il l'accèpte!!!:?Code:
1
2 const unsigned char anim1[]={0,20,....
Version imprimable
bonjour,
j'ai le message d'erreur suivant:
Code:
1
2 src/Bmp\Anim1.h:1: error: syntax error before "char"
et si je supprimer l'unsigned de la déclaration il l'accèpte!!!:?Code:
1
2 const unsigned char anim1[]={0,20,....
- Quel compilo ? (nom, plate-forme, version, etc.)
- On peut voir ce qu'il y a AVANT cette ligne ?
Visiblement, c'est la première ligne du header. Dans ce cas, peut-on voir ce qu'il y a à la fin du header précédent ?- Tu n'as pas quelque part une erreur de typedef remplacé par un mauvais #define ?
Compilo : gcc 3.4.3
Plate-forme : windows
Le fichier anim1.h contient :
le header précédent contientCode:
1
2
3
4 const unsigned char anim1[]={ 0,20, .. }
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #ifndef _CPS_H_ #define _CPS_H_ #include "StrucGl.h" #include "Nucleus.h" #include "IntCons.h" #include "erreurs.h" #include "Dates.h" typedef struct _CartePS TCartePS; UINT16 EI96_LectureCartePS( TCartePS *cps, char *CodePS); UINT16 EncapsulePssLectureCPS(UINT8 *buffer,UINT8 *CodePS); void TraiteReponseLectureCartePS(TCartePS *cps,UINT8 *MessageRetour,UINT16 lgMessage); #endif
Salut, essaye ca pour voir :
Code:
1
2
3
4 #undef unsigned const unsigned char anim1[]={ 0,20, .. }
apparament ça marche, j'ai d'autres erreurs , mais pas l'erreur d'avant,
tu peux me donner une ptt explication sur ce que fait ce #undef unsigned :D
parmi ces erreurs:
pour la définition suivante:Code:
1
2 src/EFT_MOT.c:9: error: parse error before "UINT8"
!!!!!Code:
1
2
3
4
5
6
7
8
9
10
11
12 typedef struct { UINT8 Cpt ; UINT8 EtatFort ; UINT8 EtatFaible ; UINT8 lgAtr ; UINT8 Atr[32] ; UINT8 Iin[5] ; UINT8 Pix[2] ; } tContexte ;
essaie :
Code:
1
2
3
4
5
6
7
8
9
10
11 typedef struct _Contexte { UINT8 Cpt ; UINT8 EtatFort ; UINT8 EtatFaible ; UINT8 lgAtr ; UINT8 Atr[32] ; UINT8 Iin[5] ; UINT8 Pix[2] ; } tContexte ;
hu hu, ça marche pas!
qu'y a-t-il juste avant ?
c la prmière définition dans mon fichier .c:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 typedef struct { UINT8 Cpt ; UINT8 EtatFort ; UINT8 EtatFaible ; UINT8 lgAtr ; UINT8 Atr[32] ; UINT8 Iin[5] ; UINT8 Pix[2] ; } tContexte ; /*!< contexte CPS*/ static tContexte _Contexte; /** \brief Fonction de préparation du contexte de carte pour la première connexion (Spécif EFT20) * * @return void * **/ void PreparerContexte(void) { if (_Contexte.lgAtr[3]==0x00){ /* Contexte par defaut */ _Contexte.Cpt=0x00; _Contexte.EtatFort=0xAF; _Contexte.EtatFaible=0x30; _Contexte.lgAtr=0; memset(_Contexte.Atr,0x00,32); memset(_Contexte.Iin,0x00,05); memset(_Contexte.Pix,0x00,02); } } ............
Citation:
Envoyé par moon93
Citation:
Envoyé par Ton maître
Il y a forcément quelque chose avant sinon UINT8 ne peut pas être compilé.Citation:
Envoyé par moon93
Ajoute devant
Code:#define UINT8 unsigned char
Non, il faut utiliser un typedef pour definir un nouveau type proprement. La longue liste d'erreurs rencontrees par moon93 est justement due a un usage abusif de #define -- a la fin, son unsigned est tres certainement re-defini a l'arrache, avec peut-etre un ; qui traine.Citation:
Envoyé par Ti-R
moon93: il faut etre rigoureux dans la definition et l'utilisation de tes nouveaux types, eviter de definir un nombre trop important de nouveaux types qui se referent a la meme chose, et se rappeler que le C fait la difference entre minuscules et majuscules.
Medinoc: evite de te citer en mettant 'Ton maître a écrit :'. C'est un forum d'entraide, pas de tutorat.
oui, ta raison, j'ai oublié un include
merci:mouarf:
merci DaZumba pour ces conseils:)
DaZumba : Je plaisantais, je suis toujours un peu sarcastique quand je dois me citer moi-même...
Une manière d'extérioriser la frustration de ne pas avoir été lu la première fois...
C'est pas de ma faute si dans un de ses fichiers unsigned est "defined" à nouveau :PCode:typedef unsigned char UINT8;
typedef est plus propre mais des #define ne font pas de mal non plus si c'est correctement utilisé, comme tout...
Mais c'est sur que j'aurais du proposer typedef...
Ah ca, je suis bien d'accord avec toi.Citation:
Envoyé par Médinoc
Ben, comme typedef signifie 'type definition', je ne vois pas pourquoi utiliser autre chose pour definir un type...Citation:
Envoyé par Ti-R
Ti-R : Et comment évites-tu ce genre de problème avec les #define ?
Code:
1
2
3
4
5
6
7 #define PINT int * void f(void) { int tab[10]; const PINT pInt = tab; }
Code:
1
2
3
4
5
6
7 typedef int * PINT; void f(void) { int tab[10]; const PINT pInt = tab; }
Je dois être mal réveillé, car je ne vois pas de problème...