2014-05-15 21 views
6

Ben, bir sınıf içinde tanımlanmış bir üye işlev işaretçisi var mesela:çağrılması işaretçi-için-üye fonksiyonu C++

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

    void foo2(); 
}; 

benim ana kodunda, o zaman set foo olarak:

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

Ancak, foo aramaya çalıştığınızda: "hata: bariz çağrının ifadesi önceki parantez olmalıdır aşağıdaki derleme zamanı hatası alıyorum

a->foo(); 

(pointer-to-) işlev türü ". Sözdizimi bir yere yanlış anladığımı farz ediyorum, birisi bana gösterebilir mi?

+4

' örnek çalışma ideone here görüyor musunuz? –

+0

Maalesef, bu işe yaramıyor. a -> * foo(), "error: foo undefined" değerini döndürür ve -> * (a-> foo)(), orijinal hata mesajını verir. – wolfPack88

+3

'a -> * (a-> foo) civarında parense ihtiyacınız var. Operatör önceliği nasıl çalışır? –

cevap

13

yapardın adlandırmak: (a->*(a->foo))()

(a->*X)(...) - Üye işlev işaretçisi dereferences - parens etrafında a->*X öncelik için önemlidir. Örneğinizde

X = a->foo. (-> * (a-> foo) a)() `- Bence

+1

Çalışma örneği ve tartışma için C++ SSS bölümüne bakın: http://www.parashift.com/ C++ - sss/işaretçileri-to-members.html –