2010-05-24 9 views
8

एक उदाहरण वर्ग को देखते हुए: "शब्द 2 तर्क लेने वाले फ़ंक्शन का मूल्यांकन नहीं करता है"। मैं क्या गलत कर रहा हूं?एक वर्ग के भीतर एक सदस्य समारोह सूचक का उपयोग करना

+0

संपादन के लिए धन्यवाद :) –

+0

... कोई समस्या नहीं;) – neuviemeporte

उत्तर

18

वाक्य रचना आप की जरूरत लगता है कि:

((object).*(ptrToMember)) 

तो अपने कॉल होगा:

((*this).*(func))(foo, bar); 

मेरा मानना ​​है कि एक वैकल्पिक वाक्य रचना होगा:

(this->*func)(foo, bar); 
6

आप की जरूरत है निम्नलिखित एक सूचक के माध्यम से सदस्य कार्यों को कॉल करने के लिए फंकी वाक्यविन्यास:

(this->*func)(foo, bar); 
4

देखभाल करने के लिए आपको दो चीजें हैं जिनकी आपको आवश्यकता है।

private: 
    typedef double (Fred::*fptr)(int x, int y); 
    fptr func; 

अगला है एक सूचक का उपयोग कर समारोह फोन करने के लिए वाक्य रचना:

(this->*func)(foo,bar) 

यहाँ संशोधित नमूना कोड है कि संकलन और चलेंगे है: सबसे पहले समारोह सूचक प्रकार की घोषणा है

#include <iostream> 

class Fred 
{ 
public: 
    Fred() 
    { 
    func = &Fred::fa; 
    } 

    void run() 
    { 
    int foo = 10, bar = 20; 
    std::cout << (this->*func)(foo,bar) << '\n'; 
    } 

    double fa(int x, int y) 
    { 
    return (double)(x + y); 
    } 
    double fb(int x, int y) 
    { 
    } 

private: 
    typedef double (Fred::*fptr)(int x, int y); 
    fptr func; 
}; 

int 
main() 
{ 
    Fred f; 
    f.run(); 
    return 0; 
} 
0

गैर स्थिर वर्ग सदस्य कार्यों ने इस सूचक को तर्क के रूप में छुपाया है।

मुझे लगता है, वाक्यविन्यास (यह -> * func) (foo, bar) संकलक को यह समझने का तरीका है कि इसे फ़ंक्शन में जोड़ने की आवश्यकता है।

1

दो तर्कों वाला एक सदस्य फ़ंक्शन वास्तव में तीन तर्क फ़ंक्शन है। 'यह' एक निहित तर्क है इसलिए आपको जो त्रुटि मिल रही है वह 'यह' तर्क खोने के बारे में है।

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