2012-08-30 8 views
46

मैं सदस्य फ़ंक्शन पॉइंटर के साथ कुछ परीक्षण करने की कोशिश कर रहा हूं। इस कोड के साथ क्या समस्या है? bigCat.*pcat(); कथन संकलित नहीं करता है।किसी सदस्य फ़ंक्शन पॉइंटर से कैसे कॉल करें?

class cat { 
public: 
    void walk() { 
     printf("cat is walking \n"); 
    } 
}; 

int main(){ 
    cat bigCat; 
    void (cat::*pcat)(); 
    pcat = &cat::walk; 
    bigCat.*pcat(); 
} 

उत्तर

77

अधिक कोष्ठकों की आवश्यकता है:

(bigCat.*pcat)(); 
^   ^

समारोह कॉल (()) सूचक करने वाली सदस्य बाध्यकारी ऑपरेटर (.*) से अधिक पूर्वता है। यूनरी ऑपरेटरों की बाइनरी ऑपरेटरों की तुलना में अधिक प्राथमिकता है।

+0

@ एड्रियन कॉर्निश: नहीं, लेकिन 'पीकैट' सदस्य का नाम नहीं है, यह सूचकांक से सदस्य को' मुख्य 'में स्थानीय चर के रूप में घोषित करता है। –

+0

क्या आप इस तरह के सदस्य func को भी कॉल कर सकते हैं (कभी कोशिश नहीं की) –

+2

@AdrianCornish: हां। –