2010-03-03 12 views
5

मुझे कुछ समय पहले यह समस्या थी और मैंने छोड़ दिया लेकिन हाल ही में यह लौटा।किसी अन्य विधि से विधि में पॉइंटर को कैसे कॉल करें

#include <iostream> 

class element2D; 

class node2D 
{ 
public: 
    void (element2D::*FunctionPtr)(); 
    void otherMethod() 
    { std::cout << "hello" << std::endl; 
     ((this)->*(this->FunctionPtr))(); //ERROR<------------------- 
    } 

}; 

class element2D 
{ 
public: 
    node2D myNode; 
    void doSomething(){ std::cout << "do something" << std::endl; } 
}; 

int main() 
{ 
    element2D myElement; 

    myElement.myNode.FunctionPtr = &element2D::doSomething; //OK 
    ((myElement).*(myElement.myNode.FunctionPtr))();  //OK 

    return 0; 
} 

मैं चिह्नित लाइन पर त्रुटि मिल रही है:

pointer to member type 'void (element2D::)()' incompatible with object type 'node2D' 

मैं मदद के लिए वास्तव में आभारी होगा। आज भी ऐसा ही सवाल था जिसने मुझे आंशिक रूप से मदद की: link। लेकिन यह मेरी समस्या का पूरा जवाब प्रतीत नहीं होता है।

दरअसल इन दो समस्याओं में केवल एक अंतर होता है - बिंदु जहां फ़ंक्शन कहा जाता है।

धन्यवाद अपना समय

उत्तर

5

"यह" नोड 2 डी के लिए एक सूचक है लेकिन FunctionPtr element2D के सदस्य को संदर्भित करता है - यह त्रुटि है।

0 #if // टूटी हुई संस्करण

void otherMethod() 
{ std::cout << "hello" << std::endl; 
    ((this)->*(this->FunctionPtr))(); //ERROR<------------------- 
} 

#else // तय संस्करण

void otherMethod(element2D * that) 
{ std::cout << "hello" << std::endl; 
    ((that)->*(this->FunctionPtr))(); 
} 

#endif

तो फिर तुम जैसे कुछ से कॉल करने की:

myElement.myNode.otherMethod(&myElement); 

ऐसी चीजें हैं जो आप क्यू एलडी इस पर सुधार करने के लिए करते हैं, लेकिन यह आपको शुरू करना चाहिए।

0

के लिए आप element2D वस्तु के लिए एक सूचक की जरूरत है अगर आप element2D सदस्य के लिए एक सूचक कॉल करना चाहते हैं। अपनी इच्छित कार्यक्षमता के लिए Boost.Function या Boost.Signals2 का उपयोग करने पर विचार करें।

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