मुझे एक संकलन त्रुटि (एमएस वीएस 2008) मिल रही है जिसे मैं समझ में नहीं आता। कई घंटों तक इसके साथ गड़बड़ करने के बाद, यह सब धुंधला है और मुझे लगता है कि कुछ बहुत स्पष्ट (और बहुत बेवकूफ) है जो मुझे याद आ रही है। यहां आवश्यक कोड है:मैं पॉइंटर-टू-सदस्य-फ़ंक्शन कैसे कॉल करूं?
typedef int (C::*PFN)(int);
struct MAP_ENTRY
{
int id;
PFN pfn;
};
class C
{
...
int Dispatch(int, int);
MAP_ENTRY *pMap;
...
};
int C::Dispatch(int id, int val)
{
for (MAP_ENTRY *p = pMap; p->id != 0; ++p)
{
if (p->id == id)
return p->pfn(val); // <--- error here
}
return 0;
}
कंपाइलर तीर पर दावा करता है कि "शब्द 1 तर्क लेने वाले फ़ंक्शन का मूल्यांकन नहीं करता है"। क्यों नहीं? पीएफएन एक समारोह के रूप में एक तर्क के रूप में प्रोटोटाइप किया जाता है, और MAP_ENTRY.pfn एक पीएफएन है। मुझे यहां क्या समझ नहीं आ रहा है?
सी वाक्यविन्यास जंगली है, इसलिए उत्तर के रूप में नहीं जोड़ना चाहिए, यह "वापसी (* (पी-> पीएफएन)) (वैल) नहीं होना चाहिए;"? - –
नहीं, जो त्रुटि को उत्पन्न करता है "* प्रकार सी :: पीएफएन के संचालन पर अवैध"। – chrisd
संभावित डुप्लिकेट [कॉलिंग सी ++ क्लास विधियों को फ़ंक्शन पॉइंटर के माध्यम से कॉल करना] (http://stackoverflow.com/questions/1485983/calling-c-class-methods-via-a- कार्यक्षमता- सूचक) –