čtvrtek 18. srpna 2011

C/C++: Callback ve struktuře

Tsha,
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{
    ..
    ..
}tSTRUCT 
Až s pomocí stackoverflow jsem dal dohromady řešení, které překladač přechroustá bez reptání.

Žádné komentáře:

Okomentovat