structure, tableau et pointeur
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
Code:
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 type guint correspond au type unsigned int défini dans Glib
Le tableau
Code:
reversiCase plateau[LGMAX][LGMAX];
LGMAX est une constante paire.
La partie du code ou ça ne va pas:
Code:
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);
}
} |
ici, x et y sont de type int, et voici ma fonction "clickCase"
Code:
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");
} |
Les erreurs montrées par le compilateur (gcc sous devcpp):
Citation:
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.