2012-05-26 17 views
28

मैं एक वर्ग Cache जो एक समारोह लिखनेगुजर 'स्थिरांक इस तर्क को छोड़ देता है क्वालिफायर [-fpermissive]

bool write(const MemoryAccess &memory_access, CacheLine &cl); 

मैं इस तरह इस कार्यप्रणाली को कॉल कर रहा हूँ के रूप में निर्दिष्ट है की है।

const Cache *this_cache; 
c = (a==b)?my_cache:not_cache; 
c->write(memory_access,cl); 

ऊपर लाइन

"के रूप में की 'इस' तर्क 'स्थिरांक कैश' गुजर 'bool कैश :: लिखने (स्थिरांक MemoryAccess &, CacheLine &)' छोड देता है त्रुटि निम्न मुझे दे रहा है क्वालीफायर [-फर्ममिसिव]। "

यह तर्क संकलक विशिष्ट है जो कोड-मैंगलिंग और स्थानीय नेमस्पेस चर प्राथमिकता को तोड़ने में मदद करता है। लेकिन इस तरह के एक चर यहां पारित नहीं किया जा रहा है।

+0

अपने उदाहरण ठीक करने के लिए प्रयास करें: आप के बारे में समारोह 'write' बात करते हैं, फिर आप 'पढ़ा' कहते हैं। आप 'memory_access' और 'cl' कहां घोषित करते हैं? – betabandido

+1

* यह तर्क संकलक विशिष्ट है जो कोड-मैंगलिंग में मदद करता है और स्थानीय नेमस्पेस चर प्राथमिकता को तोड़ता है ??? ??? – NPE

उत्तर

35

चूंकि cconst Cache * प्रकार है, तो आप केवल const सदस्य फ़ंक्शन पर कॉल कर सकते हैं।

आपके पास दो विकल्प:

(1) c की घोषणा से const निकालना;

(2) Cache::write() इसलिए की तरह बदलने के लिए:

bool write(const MemoryAccess &memory_access, CacheLine &cl) const; 

(नोट समाप्ति पर जोड़ा const।)

+3

हस्ताक्षर के अंत में कॉन्स का महत्व क्या है ?? जब हम कहते हैं कि यह स्थिर है तो हमारा क्या मतलब है। क्या यह डिफ़ॉल्ट रूप से स्थिर नहीं होना चाहिए ?? –

+1

@ prathmesh.kallurkar: http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.10 – NPE

4

जब आप ऑब्जेक्ट के लिए पॉइंटर के माध्यम से कोई विधि कॉल करते हैं, तो यह ऑब्जेक्ट विधिवत this पॉइंटर के रूप में विधिवत रूप से पास हो जाता है। c में शायद const Cache* है। चूंकि विधि writeconst के रूप में घोषित नहीं किया गया है, यह गैर स्थिरांक this सूचक उसके शरीर c की const क्वालीफायर खारिज किया जा करने की आवश्यकता से पहुँचा जा सकता है।

0

इसके अलावा अपने वर्ग की विधि किसी भी सदस्य पर सूचक लौटाता है यदि आप लिखने स्थिरांक भूल नहीं करना चाहिए लौटने प्रकार उदाहरण से पहले:

const float * getPosition() const{...}

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