यह त्रुटि:
त्रुटि C2664: 'सेट :: सेट (int (__cdecl * ) (एलेम टाईप, एलेम टाईप)) ':' इंट (__सीडीसीएल *) से 'पैरामीटर 1 को परिवर्तित नहीं किया जा सकता है' (सुधार टी एंड, सुधार टी एंड) 'से' इंट (__सीडीसीएल *) (एलमटीप, एलेम टाइप) ' <पी> बीएसटी आधारित एसईटी वर्ग के भाग के रूप में इस तुलनात्मक क्रिया को कार्यान्वित करने का नतीजा है,
int compareCorr (संरचना सुधार टी एंड ए, स्ट्रक्चर सुधार टी एंड बी) {if (a .एडिट डिस्टंस & लेफ्टिनेंट; बी। एडिट डिस्टेंस) रिटर्न -1; और अगर (ए.डिडिटवाद == b.editDistance) 0; और वापसी 1; }
वर्ग सेट
सेट (इंट (* cmpFn) (एलेम टाइप, एलेम टाइप) = ऑपरेटर सीएमपी);
और सेट में तुलना फ़ंक्शन का उपयोग ऐड
टेम्पलेट & lt; typename ElemType & gt; शून्य सेट & lt; ElemType & gt ;: add (एलमटीइप तत्व) {bst.add (तत्व); }
और बीएसटी क्लास को रीसेट करने हेडर फाइल में जोड़ें
BST (int (* cmpFn) (एलेम टाइप 1, एलेमे टाइप 2) = ऑपरेटर सीएमपी);
और फ़ंक्शन जोड़ें
टेम्पलेट & lt; typename ElemType & gt; Bool BST & lt; ElemType & gt; :: add (एलेम टाईप डेटा) {बूल बनाया NewNode = false; RecAddNode (रूट, डेटा, बनाया NewNode); यदि (निर्मितनईनोड) टाइमस्टैम्प ++; वापसी बनाईनई नोद; } टेम्पलेट & lt; typename ElemType & gt; बूल बीएसटी & एलटी; एलेम टाईप & gt; :: रिक एडेड नोड (नोडट * एंड ए, एलमटीइप एंड डाटा, बॉल्स एंड निर्मित न्यू नोद) {यदि (टी == नल) {टी = नया नोडट; टी- & gt; डेटा = डेटा; टी- & gt; बीएफ = बीएसडीईआईएनएलएएलएएस; टी- & gt; बायां = टी- & gt; right = NULL; निर्मितनवीननोड = सच; numNodes ++; वापस सच; } Int sign = cmpFn (डेटा, टी-> डेटा); यदि (साइन == 0) {t- & gt; डेटा = डेटा; निर्मितनवीननोड = गलत; विवरण झूठा है; } Int bfDelta = 0; यदि (साइन एंड लेफ्टिनेंट; 0) {यदि (रिक एडेनोड (टी-> gt; बाएं, डेटा, बनाया गया नैनो)) {bfDelta = -1; / * बाएं उपशीर्षक अधिक है * /}} और {यदि (रिक एडेनोड (टी-> जी, सही, डेटा, बनाया गया)) {bfDelta = +1; / * सही उपशीर्षक उच्च है * /}} updateBF (टी, बीएफडील्टा); वापसी (बीएफडील्टा! = 0 & amp; amp; टी- & gt; बीएफ! = बीएसटीएनआईएनएलएएलएएनएस); }
कोई भी विचार जो यहाँ पर हो रहा है - तुलना फ़ंक्शन के साथ क्या समस्या है?
तुलनाकारकर्ता प्रकार
int (लेक्सिकन :: सुधार टी एंड, लेक्सिकन :: सुधार टी एंड) है। इसके पैरामीटर संदर्भ हैं।
cmpFn का प्रकार, कन्स्ट्रक्टर का पैरामीटर है, यह
int (*) (एलमटीप, एलेम टाइप) है। इसके पैरामीटर ऑब्जेक्ट हैं (संदर्भ नहीं)।
प्रकारों को मैच करना चाहिए। यह मानते हुए कि
ElemType है
लेक्सिकन :: सुधार टी , आपको फ़ॉरेस्ट पॉइंटर प्रकार को संदर्भ पैरामीटर प्रकार के लिए परिवर्तित करना होगा या ऑप्टर पैरामीटर टाइप करने के लिए तुलनात्मक प्रकार को बदलना होगा। (यदि आप संदर्भ मार्ग पर जाते हैं, तो दोनों को कॉन्स्ट संदर्भ का प्रयोग करना चाहिए, क्योंकि एक तुलनाकर्ता वस्तुओं को बदलना नहीं चाहिए।)
वैकल्पिक रूप से, आप ऐसा कर सकते हैं जो एसटीएल करता है, और तुलनाकर्ता को प्रकार, तुलना के लिए मनमाने ढंग से फ़ंक्शन ऑब्जेक्ट के उपयोग की अनुमति इसके बाद, तुलनाकर्ता की तुलना में उन वस्तुओं के प्रकार के संगत प्रकारों के मापदंडों की आवश्यकता होती है (जैसे चीजों को बिल्कुल मिलान करने की आवश्यकता नहीं है)।
Comments
Post a Comment