सदस्य फ़ंक्शन पॉइंटर के लिए int का नक्शा बनाने और इसे कन्स्ट्रक्टर प्रारंभकर्ता के अंदर प्रारंभ करने का प्रयास कर रहा है। इस तरह:कन्स्ट्रक्टर प्रारंभकर्ता के अंदर मानचित्र की प्रारंभिक सूची का उपयोग करके
class X
{
using STATEFUNC = void(X::*)(int);
public:
X() : m{ { 1, &setState1 } } {}
void setState1(int x) { cout << "state1" << endl; }
void setState2(int x) { cout << "state2" << endl; }
std::map<int, STATEFUNC> m;
};
मैं कहूंगा कि यह सही है, लेकिन दृश्य स्टूडियो 2017 का कहना है:
Error C2664 'std::map,std::allocator>>::map(std::initializer_list>)': cannot convert argument 1 from 'initializer list' to 'std::initializer_list>'
Error C2276 '&': illegal operation on bound member function expression
जब आप सदस्य समारोह से ऑपरेटर की पता हटाने के पहले त्रुटि संदेश ही रहता है लेकिन के बाद दूसरे स्थान परिवर्तन:
Error C3867 'X::setState1': non-standard syntax; use '&' to create a pointer to member
कैसे आप एक निर्माता प्रारंभकर्ता सूची के अंदर सदस्य समारोह सूचक को पूर्णांक का एक नक्शा प्रारंभ करते हैं?
दिलचस्प। निश्चित नहीं है कि क्यों इसे यहां कक्षा का नाम चाहिए। उम्मीद है कि किसी को पता चलेगा कि क्यों एक्स(): एम {{1, और एक्स :: सेटस्टेट 1}} {} 'काम करता है लेकिन 'एक्स(): एम {{1, और सेटस्टेट 1}} {}' – NathanOliver
' पहचानकर्ता 'नहीं कर सकता किसी सदस्य फ़ंक्शन का पता लेने के लिए कभी भी उपयोग न करें (या तो स्पष्ट रूप से '&' या क्षय के साथ); आपको हमेशा एक योग्य-आईडी –