मैंने घोषित किया है:
class aaa {public: static std :: queue & lt; qpair & lt ; शून्य (*) (...), अंतराल & gt; & Gt; m_commands; स्थिर इंट बीबीबी (); स्थिर शून्य ccc (...); }; और बीबीबी () पद्धति में मैंने लिखा:
int aaa :: bbb () {m_commands.push (qmakepair (aaa :: ccc, 0) )); } लेकिन इसके बारे में शिकायत है:
त्रुटि C2664: 'void std :: queue & lt; _Ty & gt; :: push (QPair & lt; T1, T2 & gt; ; & Amp;) ': पैरामीटर 1 को' क्यूपीयर & lt; T1, T2 & gt; 'क्यूपीयर और एलटी; टी 1, टी 2 & gt; & Amp; & amp; ' क्यों? जब मेरे पास इस तरह कार्य था:
शून्य reg (शून्य (* आमंत्रक) (...), int args) {m_commands.push (qMakePair (invoker, args)); } मैं आसानी से उपर्युक्त कार्य को एक स्थिर कार्य इस तरह भेज सकता हूं:
reg (aaa :: ccc, 0);
qMakePair (एए :: सीसीसी, 0) है (अनुमानतः) प्रकार QPair & lt; void (*) (), int & gt; के मान को वापस नहीं लौटाता है, क्योंकि यह नहीं जानता कि आप टाइप की एक मान QPair & lt; void (*) ( ...), अंतराल & gt; इसे स्पष्ट रूप से qMakePair & lt; void (*) (...), int & gt; (aaa :: ccc, 0) या reinterpret_cast aaa :: ccc < / कोड> वांछित समारोह सूचक प्रकार के लिए। ऐसा नहीं है कि यह (लगभग निश्चित रूप से) अवैध , जैसा कि aaa :: ccc नहीं है सही हस्ताक्षर हैं और फ़ंक्शन पॉइंटर प्रकार के माध्यम से उपयोग नहीं किया जा सकता जिसे आप उपयोग कर रहे हैं।
Comments
Post a Comment