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 :
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;
     .......
     ...
Voici l'erreur que j'obtient :
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
la ligne 14 étant :

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