2014-05-15 9 views
6

mam wskaźnik do funkcji składowej określonej w obrębie klasy, np:Wywołanie wskaźnik do członka funkcja C++

class Example { 
    void (Example::*foo)(); 

    void foo2(); 
}; 

W moim głównym kodu, a następnie ustawić foo jako:

Example *a; 
a->foo = &Example::foo2; 

jednak gdy próbuję zadzwonić foo:

a->foo(); 

pojawia się następujący błąd czasu kompilacji: „error: wyrażenie poprzedzające nawiasy pozornego połączenia musi mieć (wskaźnik na zadanie) typ funkcji ". Zakładam, że gdzieś mam błędną składnię, czy ktoś może mi to wskazać?

+4

'pracuje (a -> * (a-> foo))()' - myślę? –

+0

Niestety, to nie działa. a -> * foo() zwraca "error: foo is undefined", a a -> * (a-> foo)() podaje oryginalny komunikat o błędzie. – wolfPack88

+3

potrzebujesz parens wokół 'a -> * (a-> foo)' z powodu tego, jak działa pierwszeństwo operatora –

Odpowiedz

13

nazwać to zrobisz: (a->*(a->foo))()

(a->*X)(...) - dereferences wskaźnik funkcji użytkowników - nawiasy wokół a->*X są ważne dla pierwszeństwa.

X = a->foo - w twoim przykładzie.

Zobacz ideone here na przykład

+1

Zobacz FAQ C++ dla przykładu roboczego i dyskusji: http://www.parashift.com/ C++ - faq/pointers-to-members.html –

Powiązane problemy