Bonjour a tous, donc je pratique le C depuis quelques mois ainsi que GTK.
Je n'arrive pas à mettre le doigt sur une erreur concernant apparement un pointeur permettant de remonter dans une structure seulement le point où je souhaite remonter est un tableau.
Voici le code:
la structure en question
le type guint correspond au type unsigned int défini dans Glib
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 typedef struct { GtkWidget* widget; GtkWidget* image; _Bool libre; short int proprietaire; guint posX; guint posY; struct reversiCase* pPlateau; }reversiCase;
Le tableau
LGMAX est une constante paire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part reversiCase plateau[LGMAX][LGMAX];
La partie du code ou ça ne va pas:
ici, x et y sont de type int, et voici ma fonction "clickCase"
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
20
21
22 for( y = 0; y < LGMAX; y++ ) { pHBoxLignePlateau[y] = gtk_hbox_new(FALSE, 0); gtk_box_pack_start( GTK_BOX( pVBoxPlateau ), pHBoxLignePlateau[y], FALSE, FALSE, 0); for( x = 0; x < LGMAX; x++) { plateau[x][y].widget = gtk_button_new(); plateau[x][y].image = gtk_image_new(); plateau[x][y].libre = TRUE; plateau[x][y].posX = x; plateau[x][y].posY = y; plateau[x][y].pPlateau = &plateau[x][y]; //WARNING ici ! gtk_container_add(GTK_CONTAINER(plateau[x][y].widget), plateau[x][y].image); gtk_widget_set_usize(plateau[x][y].widget, 50, 50); g_signal_connect(G_OBJECT(plateau[x][y].widget), "clicked", G_CALLBACK(clickCase), plateau[x][y].pPlateau); gtk_box_pack_start( GTK_BOX( pHBoxLignePlateau[y] ), plateau[x][y].widget, FALSE, FALSE, 0); } }
Les erreurs montrées par le compilateur (gcc sous devcpp):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 void clickCase( GtkWidget* pWidget, gpointer* pData ){ gtk_image_set_from_file(GTK_IMAGE(plateau[pData->posX][pData->posY].image),"images/pion_blanc.png"); //ERREUR ici ! printf("fonction executee\n"); }
request for member `posX' in something not a structure or union
request for member `posY' in something not a structure or union
g_signal_connect(); ne prend que 4 arguments, dont le dernier est l'argument à passer à la fonction utilisé par le Callback (ici clickCase). Hors j'ai besoin d'en passer plusieurs, par conséquent j'ai crée la structure reversiCase dans laquelle se situe toutes les données que je souhaite passer en argument à clickCase (du moins certains) avec le pointeur pPlateau qui me permet d'avoir accès à tout les champs de la structure (c'est ce pointeur que je souhaite passer en argument à clickCase via le g_signal_connect(); ).
En espèrant etre assez claire, merci d'avance.
Partager