Wskaźnik na funkcję niestatyczną klasy

Odpowiedz Nowy wątek
2011-09-29 11:05
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? :)

edytowany 2x, ostatnio: 4ggr35510n, 2011-09-29 11:06

Pozostało 580 znaków

2011-09-29 11:17
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);


░█░█░█░█░█░█░█░█░█░█░█░
edytowany 2x, ostatnio: krwq, 2011-09-29 11:20

Pozostało 580 znaków

2011-09-29 11:20

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

Pozostało 580 znaków

2011-09-29 11:36
ds
0

http://ideone.com/2RIym

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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