c++ - Abstract Classes and virtual methods problems: "cannot allocate an object of abstract type" -
मेरे पास ये कक्षाएं हैं:
वर्ग आईडीस्क्रिप्टर {सार्वजनिक: आभासी फ्लोट की तुलना करें (IDscriptor * डी) = 0; }; कक्षा डिस्क्रिप्टोग्राम: सार्वजनिक आईडीस्क्रिप्टर {सार्वजनिक: वेक्टर & lt; float & gt; desc; डिस्काहिस्टोग्राम (वेक्टर & lt; float & gt; vd); ~ DescHistogram (); फ्लोट की तुलना करें (डिस्काहिस्टोग्राम * डी); / / इन सभी कार्यों को स्रोत सीपीपी फाइल में लागू किया जाता है। }; और मेरे कोड में कुछ जगहों में मैं यह निपुणता करता हूं:
vector & lt; float & gt; hist; [...] // वेक्टर भरना डेसिसहिस्टोग्राम * myDesc = नया डिस्काहिस्टोग्राम (हिस्ट); point.setDescriptor (myDesc); संकलक मुझे निम्न त्रुटि देता है:
त्रुटि: सार प्रकार 'DescHistogram' नोट के ऑब्जेक्ट को आवंटित नहीं कर सकता: क्योंकि निम्न वर्चुअल फ़ंक्शन शुद्ध हैं 'डेसशिहोग्राम' के भीतर: नोट: वर्चुअल फ्लोट आईडीस्क्रिप्टर :: तुलना (आईडीस्क्रिप्टर *) मुझे इसके बारे में कुछ सवाल हैं:
इस त्रुटि का कारण क्या है? किस प्रकार का DescHistogram :: comparison का पैरामीटर होना चाहिए? मैं समझता हूं कि यह एक व्युत्पन्न प्रकार हो सकता है, है ना? एक निर्माता को अमूर्त वर्ग आईडीस्क्रिप्टर
द्वारा इसकी जरुरत है शायद यह एक बेवकूफ त्रुटि है, लेकिन मुझे अपने मामले के लिए कोई समाधान नहीं मिला। आपकी मदद के लिए अग्रिम धन्यवाद!
इस त्रुटि का कारण क्या है?
डिस्क्सहिस्टोग्राम एक संगत फ़ंक्शन के साथ आईडीस्क्रिप्टर :: तुलना ओवरराइड नहीं करता है, इसलिए यह अभी भी सार है और इन्स्टॉरिएटेड नहीं किया जा सकता है।
किस प्रकार को
पैरामीटर काDescHistogram :: compare?
आईडीस्क्रिप्टर होना चाहिए, फ़ंक्शन से मेल करने के लिए यह ओवरराइड करता है यह किसी भी प्रकार के साथ कोलाबल होना चाहिए, जो बेस-क्लास फ़ंक्शन स्वीकार करता है, और ऐसा अधिक व्युत्पन्न प्रकार नहीं हो सकता।
मैं समझता हूं कि यह एक व्युत्पन्न प्रकार हो सकता है, है ना ?
नहीं इसका एक ही प्रकार होना चाहिए।
कोई निर्माता अमूर्त वर्ग
IDescriptor?
नहीं आवश्यक है यह पहले से ही एक निहित डिफ़ॉल्ट कन्स्ट्रक्टर है, और किसी भी गैर-सार व्युत्पन्न वर्ग के हिस्से के रूप में तत्काल होने की आवश्यकता नहीं है।
Comments
Post a Comment