Wskaźnik na funkcję niestatyczną klasy

0

Witam!

Poniżej najkrótszy możliwy kod prezentujący moją zagwozdkę:

 int funkcja_globalna( void (*pfnWskaznik)(int, int*) ) { /// funkcja przyjmująca wskaźnik do funkcji
	return 1;
}

class Klasa {
	public:
	/* static */ void funkcja( int, int* ) { return; } /// gdy ta funkcja nie jest statyczna...
	public: Klasa();
};

Klasa::Klasa() {
	funkcja_globalna(funkcja); /// ...w tym miejscu kompilator zgłasza błąd
}


int main()
{
	return 0;
}
 

Błąd kompilatora:

argument of type 'void (Klasa::)(int, int*)' does not match 'void ()(int, int)'

Oczywiście - jeśli funkcja której wskaźnik sobie podajemy jest statyczna - wszystko śmiga.
Doszedłem do tego metodą prób i błędów i teraz chciałem się dowiedzieć...

Dlaczego tak się dzieje? :)

0

void (Klasa::pfnWskaznik)(int, int), z tym, że kompilator nie będzie wiedział co to jest Klasa, więc najpierw powinno być: class Klasa;

dodatkowo zamiast:
funkcja_globalna(funkcja);
powinno być:
funkcja_globalna(&Klasa::funkcja);

przy wywoływaniu musisz podać obiekt na którym wywołujesz:
Klasa* obj;
...
(obj->*pfnWskaznik)(parametry);

1

Szukaj a znajdziesz: Pointers to member functions
np: http://www.parashift.com/c++-faq-lite/pointers-to-members.html

0

http://ideone.com/2RIym

Tylko na co Ci wskaźnik do funkcji klasy???

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