Bonsoir,
je dois realiser un petit projet en c, dans lequel je dois déplacer un loup et des cochons sur une grille.
J'ai donc fais une méthode de déplacement "générique", c'est a dire qui prend comme parametre un pointeur void * qui pointe soit sur une strucure loup, soit sur une structure cochon.
Je passe aussi un parametre type, qui est une énumération (qui prend comme valeur soit COCHON, soit GPL (=gentil petit loup) ) afin de savoir quel type de pion je déplace.
Le problème est que gcc refuse de caster mon pointeur en fonction du type.
bon, voici le code pour etre un peu plus clair :
voici les deux structure gpl et cochon :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 typedef struct { /*les indices de la case sur laquel est le cochon : */ int caseX, caseY; /*les coordonnees du cochon pour la representation graphique: */ int x,y; /*vitesse du cochon */ vitesse v; }cochon; typedef struct { /*les indices de la case sur laquel est le cochon : */ int caseX, caseY; /*les coordonnees du gpl pour la representation graphique: */ int x,y; /*nb de teleportation sures du gpl : */ int nbTeleSure; }gpl;
et voici ma fonction de déplacement :
Voici l'erreur que j'obtient :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 void deplacement(grille *g,void *p, type t, direction d, mode modeGpl){ /*on caste le pointeur générique en fonction du type*/ if (t==GPL) gpl *c=(gpl *) p; else cochon *c=(cochon *) p; /*on va utiliser une copie des indice de la case sur laquel se trouve le pion pour tester si le déplacement est possible. La fonction de test va modifier ces deux copies.*/ int testX=c->caseX, testY=c->caseY; ....... ...
la ligne 14 étant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 src/mouvement.c: In function 'deplacement': src/mouvement.c:9: error: parse error before '*' token src/mouvement.c:14: error: 'c' undeclared (first use in this function) src/mouvement.c:14: error: (Each undeclared identifier is reported only once src/mouvement.c:14: error: for each function it appears in.) make: *** [all] Error 1
int testX=c->caseX, testY=c->caseY;
Je suis sur que l'un d'entre vous sais pourquoi ce code ne marche pas , et surtout, comment faire
merci
Partager