2012-08-22 11 views
21

मैं C++ ऑपरेटर को ओवरलोड कोशिश कर रहा हूँ == लेकिन im कुछ त्रुटियाँ हो रही ...C++ त्रुटि C2662 से 'स्थिरांक प्रकार' 'इस' सूचक परिवर्तित कर सकते हैं नहीं करने के लिए 'प्रकार और'

त्रुटि C2662: 'CombatEvent: : GetType

: स्थिरांक CombatEvent CombatEvent & '

' के लिए '' परिवर्तित नहीं कर सकते 'इस' से सूचक 'इस त्रुटि इस लाइन

if (lhs.getType() == rhs.getType()) 

bellow कोड को देखने में है

कोई भी मदद कर सकता है?

उत्तर

49
CombatEventType getType(); 

CombatEventType getType() const; 

आपका संकलक क्योंकि समारोह एक const उद्देश्य यह है कि तुम पर एक गैर const समारोह कॉल करने के लिए कोशिश कर रहे हैं दिया जा रहा है शिकायत कर रहा है की जरूरत है। जब कोई फ़ंक्शन const ऑब्जेक्ट प्राप्त करता है, तो उसे सभी कॉलों को पूरे कार्य में const होना चाहिए (अन्यथा संकलक यह सुनिश्चित नहीं कर सकता कि इसे संशोधित नहीं किया गया है)।

+1

बहुत स्मार्ट। विचार को पूरी तरह से समझने के लिए मुझे कुछ मिनट लगे। बहुत धन्यवाद। –

6

परिवर्तन घोषणा करने के लिए:

CombatEventType getType() const; 

आप केवल कॉल कर सकते हैं 'स्थिरांक' सदस्यों स्थिरांक के लिए संदर्भ गर्त।

5

यह एक कॉन्स मुद्दा है, आपकी getType विधि को कॉन्स्ट के रूप में परिभाषित नहीं किया गया है लेकिन आपके अधिभारित ऑपरेटर तर्क हैं। चूंकि GetType विधि यह गारंटी नहीं दे रहा है कि यह कक्षा डेटा को नहीं बदलेगा संकलक एक त्रुटि फेंक रहा है क्योंकि आप कॉन्स्ट पैरामीटर नहीं बदल सकते हैं;

सरल परिवर्तन जब तक निश्चित रूप से विधि वास्तव में वस्तु से बदल रहा है

CombatEventType getType() const; 

को GetType प्रक्रिया में परिवर्तन करना है।

संबंधित मुद्दे

 संबंधित मुद्दे