के बीच किसी फ़ंक्शन में पॉइंटर पास करने में असमर्थ है, मैं एक वर्ग में किसी अन्य वर्ग में परिभाषित फ़ंक्शन में एक पॉइंटर पास करने का प्रयास कर रहा हूं। बहुत से शोध के बाद, मेरा मानना है कि मेरा वाक्यविन्यास सही है, लेकिन मुझे अभी भी कंपाइलर त्रुटियां मिल रही हैं। यहाँ कुछ कोड है जो मेरी समस्या यह दर्शाता है:कक्षा
class Base
{
public:
BaseClass();
virtual ~BaseClass();
};
class Derived : public Base
{
public:
// assign strFunction to the function pointer passed in
Derived(string (*funPtr)(int)) : strFunction(funPtr);
~Derived();
private:
// pointer to the function that is passed in
string (*strFunction)(int value);
};
class MainClass
{
public:
MainClass()
{
// allocate a new Derived class and pass it a pointer to myFunction
Base* myClass = new Derived(&MainClass::myFunction);
}
string myFunction(int value)
{
// return a string
}
};
मुझे इस कोड को संकलित करने का प्रयास करें, त्रुटि मैं मिलता है
error: no matching function for call to 'Derived::Derived(string (MainClass::*)(int))'
द्वारा
note: candidates are: Derived::Derived(string (*)(int))
किसी भी विचार का पालन किया है कि मैं क्या हो सकता है गलत कर रहे हो?
और कक्षाओं को डीकॉप्लेड करने के बारे में क्या है और आप 'MainClass :: * funPtr' निर्दिष्ट नहीं कर सकते हैं? – fduff
फिर मैं पैरामीटर को 'बूस्ट :: फ़ंक्शन' पैरामीटर बनाने और 'बूस्ट :: बाइंड' –
टीएक्स के साथ फ़ंक्शन को पास करने जैसी सामान्य लाइब्रेरी का उपयोग करने की अनुशंसा करता हूं लेकिन गैर-बूस्ट प्रोजेक्ट के बारे में क्या? 'std :: function()' और 'std :: bind()' केवल C++ 11 में उपलब्ध हैं जो हमारे पास नहीं है। – fduff