c++ - problem with `==` operator -


== ऑपरेटर के साथ कुछ वर्ग wComplex है।

  #ifndef WCOMPLEX_H # परिभाषित WCOMPLEX_H # शामिल & lt; stdio.h & gt; // अजीब ``==` ऑपरेटर वर्ग wComplex के साथ जटिल-जैसी संख्याओं का नमूना वर्ग {निजी: डबल असली पार्ट; डबल इमेजपार्ट; सार्वजनिक: wComplex (); WComplex (डबल आर); WComplex (डबल आर, डबल आई); बूल ऑपरेटर == (wComplex & amp;); शून्य प्रिंट (); }; WComplex :: wComplex () {realPart = 0; ImagePart = 0; } WComplex :: wComplex (डबल आर) {realPart = R; ImagePart = 0; } WComplex :: wComplex (डबल आर, डबल आई) {realPart = R; ImagePart = I; } Bool wComplex :: ऑपरेटर == (wComplex & amp; एएल) {डबल diff = realPart * realPart + imagePart * imagePart - एल। रियलपेर्ट * एल। रियलपार्ट - एल। आईमेजपार्ट * एल। आईजेजपार्ट; वापसी (diff == 0); } शून्य wComplex :: प्रिंट () {printf ("(% g) + (% g) मैं \ n", realpart, imagepart); } #endif   

यह सफलतापूर्वक इस तरह से सामान के साथ काम करता है:

  wComplex A (1, 2); WComplex B (2, 4); WComplex सी (2, 1);   

(ए == सी) सच है।

एक और वर्ग है - कतार की तरह लेकिन इसे अन्य तत्वों के समानता के लिए नया धक्का दिया तत्व ( == अर्थ में) को नियंत्रित करना चाहिए।

  #ifndef MYQueue_H #define MYQueue_H #include & lt; stdio.h & gt ; #include & lt; queue & gt; टेम्पलेट & lt; typename T & gt; वर्ग myQueue: सार्वजनिक std :: queue & lt; T & gt; {सार्वजनिक: myQueue () {printf ("नया myQueue सफलतापूर्वक बनाया गया \ n"); } शून्य पुश (const T & amp; x) {myQueue * tmp = new myQueue; MyQueue * old = नया myQueue; पुरानी = यह; Bool MATCH = false; जबकि (! पुराना- gt; खाली ()) {टी एल = पुराना-> सामने (); If (el == x) {MATCH = true; tmp- & gt; धक्का (x); } अन्य टीएमपी- & gt; पुश (एल); old- & gt; पॉप (); } अगर (! मैट) टीएमपी- & gt; पुश (एक्स); यह = * टीएमपी; टीएमपी हटाना; पुराने हटाएं; }}; #endif   

इसलिए, अब एक समस्या है

  myqueue.h: सदस्य फ़ंक्शन में "myoid" शून्य <टी>  (Const T & amp;) [टी = wComplex] के साथ: ????: shit.cpp: 23: यहां से शुरू किया गया myqueue.h: 26: त्रुटि: एक ऑपरेटर के लिए कोई मेल नहीं है == एक ???? में एक ???? एल == xâ ???? Wcomplex.h: 36: नोट: उम्मीदवार हैं: bool wComplex :: ऑपरेटर == (wComplex & amp;) myqueue.h: 36: त्रुटि: अपेक्षित काम के बाएं प्रचालन के रूप में आवश्यक: *** [संकलन] त्रुटि 1   

असल में, मुझे समझ में नहीं आ रहा है कि क्यों कोई भी मेल ऑपरेटर == ??? में एक ?? एल == xâ और मुझे क्या करना चाहिए? कोई भी विचार

UPD: और मैं यह तत्व tmp से कैसे बदल सकता हूँ? यह = * tmp;

आपके पास एक Const T के संदर्भ में पुश () परन्तु आपका ऑपरेटर == केवल गैर-संप्रदाय संदर्भ स्वीकार करता है।

  bool wComplex :: ऑपरेटर == (wComplex & amp; एल)   

होना चाहिए

  bool wComplex :: ऑपरेटर == ( WComplex const & amp; एल) const   

या, बेहतर, आपका ऑपरेटर == एक निशुल्क कार्य होना चाहिए:

  bool ऑपरेटर == (wComplex const & amp; वाम, wComplex const & amp; amp; राइट) {}   

यदि आप wComplex के सदस्य चर तक पहुंच नहीं चाहते हैं, तो आपको ऑपरेटर एक मित्र फ़ंक्शन:

  वर्ग wComplex {... दोस्त बूल ऑपरेटर == (wComplex const & amp; बाएं, wComplex const & amp; amp; अधिकार); ...};   

संपादित करें: अपडेट किए गए प्रश्न पर:

आप यह को असाइन नहीं कर सकते। यह प्रकार का है T * const - चूंकि यह इसे संशोधित करने का मतलब नहीं होगा। आप जो करने की कोशिश कर रहे हैं वह बाहरी चर को बदलने के लिए है जो वर्तमान वर्ग को इंगित करता है, आप ऐसा नहीं कर सकते वर्ग वर्ग के भीतर के कार्य से, जब तक यह बाहरी चर एक तर्क के रूप में पारित नहीं किया जाता है।

मुझे लगता है आपको "क्यूई" वर्ग बनाने की आवश्यकता होती है जो "नोड" वर्ग के उदाहरणों का प्रबंधन करती है - एक कंटेनर को गठबंधन करने की कोशिश कर रहा है और निहित तत्व वास्तव में एक अच्छा विचार नहीं है

इसके अलावा, मानक लाइब्रेरी कंटेनरों का उत्तराधिकार शायद ही कभी अच्छा है विचार। यदि आप std :: queue का उपयोग करना चाहते हैं तो एक सदस्य चर बनायें।

Comments