2014-05-15 13 views
6

मैं, एक सदस्य समारोह एक वर्ग के भीतर परिभाषित करने के लिए एक सूचक है जैसे:कॉलिंग सूचक करने वाली सदस्य समारोह सी ++

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

    void foo2(); 
}; 

अपने मुख्य कोड में, मैं तो सेट foo के रूप में:

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

हालांकि, जब मैं foo कॉल करने के लिए प्रयास करें:

a->foo(); 

मैं निम्नलिखित संकलन समय त्रुटि मिलती है: "त्रुटि: स्पष्ट कॉल की अभिव्यक्ति पूर्ववर्ती कोष्ठकों होना आवश्यक है (पॉइंटर-टू-फ़ंक्शन प्रकार "। मुझे लगता है कि मुझे सिंटैक्स कहीं गलत हो रहा है, क्या कोई इसे मुझे इंगित कर सकता है?

+4

' काम करने के लिए ideone here देखते हैं? –

+0

दुर्भाग्य से, यह काम नहीं करता है। ए -> * foo() रिटर्न "त्रुटि: foo अपरिभाषित है" और एक -> * (a-> foo)() मूल त्रुटि संदेश देता है। – wolfPack88

+3

आपको ऑपरेटर प्राथमिकता –

उत्तर

13

यह कॉल करने के लिए करना होगा: (a->*(a->foo))()

(a->*X)(...) - dereferences एक सदस्य समारोह सूचक - कोष्ठक के आसपास a->*X पूर्वता के लिए महत्वपूर्ण हैं।

X = a->foo - आपके उदाहरण में। (-> * (a-> foo) क)() `- मुझे लगता है कि

उदाहरण

+1

एक काम करने वाले उदाहरण और चर्चा के लिए सी ++ एफएक्यू देखें: http://www.parashift.com/ C++ - पूछे जाने वाले प्रश्न/संकेत करने वाली members.html –

संबंधित मुद्दे