musím říct, že jsem byl skálopevně přesvědčen, že ze syntaxe céčka znám vše podstatné.
Nechť vznikne struktura, v které je pointer na funkci, třeba nějáký callback. V téhle funkci chci mít k dispozici data z této struktury a tak si jí předám jako parametr, resp. pointer na ní.
#include <stdio.h> #include <stdlib.h> struct tMYSTRUCTURE; typedef struct{ int myint; void (* pCallback)(struct tMYSTRUCTURE *mystructure); }tMYSTRUCTURE;Žádná velká věda, definujme ještě nějákou tu funkci..
void myCallback(struct tMYSTRUCTURE *mystructure){ puts("!!!Hello World!!!"); }a konečně vytvořme strukturu a zavolejme callback..
int main(void) { //vytvoření struktury tMYSTRUCTURE mystruct; //přirazení funkce mystruct.pCallback = myCallback; //zavolání funkce mystruct.pCallback(&mystruct); return EXIT_SUCCESS; }
..\src\retyping.c:31:5: warning: passing argument 1 of 'mystruct.pCallback' from incompatible pointer type
..\src\retyping.c:31:5: note: expected 'struct tMYSTRUCTURE *' but argument is of type 'struct tMYSTRUCTURE *'
Marně jsem vzpomínal na Herouta a na pojmy název struktury a název typu. Snad vždy jsem si vystačil s konstrukcí
typedef struct{ .. .. }tSTRUCTAž s pomocí stackoverflow jsem dal dohromady řešení, které překladač přechroustá bez reptání.
Žádné komentáře:
Okomentovat