Wskaźnik na funkcję i zależność między klasami.

0

Mamy sobie 3 klasy - A,B i C. A jest klasą nadrzędną i zawiera 2 pozostałe. C to powiedzmy rodzaj węzła w drzewie. B posiada m.in. wskaźnik na C. Do tego momentu sprawa jest prosta i wszystko działa.
Ale w C chciałbym mieć wskaźnik na funkcję, której argumentem jest wskaźnik na B:

 void Function(void(B * input));

Problem w tym, że wtedy wyskakują błędy kompilacji

error C2059: syntax error : 'function-style cast'
error C2059: syntax error : ')'
error C2143: syntax error : missing ')' before ';'

  • jak "B" zmienię sobie na inta etc. - wszystko jest ok. W sumie nie dziwię się, że jest tak jak jest - B "zna" C, ale na odwrót już tak nie jest. Niestety w B muszę mieć wskaźniki na C, więc jak zmienię kolejność includowania, tak, żeby owego błędu w C nie było, będę miał problem z B.
    Da się ten problem jakoś rozwiązać, czy jednak muszę z czegoś zrezygnować?
0
void Function( void(*fn)(B*) );
0

Można jeszcze tak:
typedef void FN(B*);
void Funkcja(FN *f);

Lub tak:
typedef void (FN)(B);
void Funkcja(FN f);

0

aby utworzyć „wskaźnik na funkcję” postępujemy według schematu:

tworzymy nagłówek normalnej funkcji

void foo(void *ptr, int size)

przy czym nazwy parametrów pomijamy

void foo(void*,int)

następnie nazwę funkcji (stanie się ona nazwą zmiennej lub parametru) poprzedzamy gwiazdką i bierzemy w nawias

void (*foo)(void*,int)

jeżeli foo ma być to zmienną, zakańczamy średnikiem

void (*foo)(void*,int);

jeżeli parametrem funkcji, po prostu wklejamy w listę parametrów

void Function(void (*foo)(void*,int)) {}

jeżeli nazwą nowego typu, poprzedzamy typedefem

typedef void (*foo)(void*,int);

a jeżeli chcemy mieć parametr funkcji jako sam typ bez nazwy parametru, w nazwie zostaje nawias i gwiazdka

void Function(void (*)(void*,int));

1 użytkowników online, w tym zalogowanych: 0, gości: 1