c++ - Return vector element reference by [] operator -


मेरे पास एक वर्ग या स्ट्रेट है, कहते हैं, कंटेनर , निम्न संरचना के साथ:

  टेम्पलेट & lt; typename type & gt; संरचना कंटेनर {वेक्टर & lt; टाइप करें * & gt; v; ... कार्य ... प्रकार * ऑपरेटर [] (इंट आई) {// इस रिटर्न के बारे में निश्चित नहीं है (वी) [i]; }};   

जहां प्रकार एक मानक प्रकार या कस्टम परिभाषित क्लास या स्ट्रेट हो सकता है।

यह संरचना इस तरह काम करती है:

 < कोड> कंटेनर & LT; प्रकार & gt; * सी (10); ग & gt; समारोह (); // यदि वेक्टर के अलग-अलग तत्वों को एक्सेस करना चाहते हैं तो मैं  
  c-> gt पर कॉल कर सकता / सकती हूं; v   

के तत्वों पर पुनरावृत्त एक फ़ंक्शन कॉल करता है। ; V [0] - & gt; फ़ंक्शन ()

जहां फ़ंक्शन प्रकार वर्ग का सदस्य है; यह उम्मीद की तरह काम करता है; हालांकि, यह मेरे द्वारा परिभाषित के रूप में [] ऑपरेटर से

  सी [0] -> फ़ंक्शन ()   

के लिए सरलीकृत किया जा सकता है < Em> होता निहित कक्षा में एक सूचक वापस लौटाएगा और कंटेनर ही नहीं, लेकिन कंपाइलर अभी भी शिकायत करता है कि कंटेनर वर्ग को "फ़ंक्शन" नामक कोई सदस्य नहीं है यह एक बड़ा मुद्दा नहीं है, जैसा कि एक अलग सिंटैक्स से आसानी से बचा जा सकता है, लेकिन मुझे लगता है कि मेरे पास कुछ मौलिक गलतफहमी है कि संकेतक और संदर्भ कैसे काम करते हैं। [ऑपरेटर को यहाँ परिभाषित करने का एक उचित तरीका क्या होगा और मुझे क्या याद आ रहा है? अग्रिम में आपका धन्यवाद

संपादित करें: मैंने अपना वास्तविक कोड प्रदर्शित करने के लिए प्रश्न संपादित किया है

आपका ऑपरेटर [] ठीक लगता है ऐसा लगता है कि आप अपने स्ट्रैट नाम के बाद एक अर्ध-बृहदान्त्र गायब हो रहे हैं।

हाँ कंपाइलर कहता है कि कंटेनर के पास कोई सदस्य फ़ंक्शन नहीं है, प्रकार नहीं।

क्या आपने कंटेनर के लिए एक फ़ंक्शन परिभाषित किया है? < p> यहां एक कंपाइलिंग है, काम कर रहे उदाहरण:

  #include & lt; iostream & gt; #include & lt; vector & gt; संरचना एक {शून्य फ़ंक्शन () {std :: cout & lt; & lt; "ए :: फ़ंक्शन ()" "\ n"; }}; टेम्पलेट & lt; typename प्रकार & gt; संरचना कंटेनर {std :: vector & lt; type * & gt; v; शून्य फ़ंक्शन () {std :: cout & lt; & lt; "कंटेनर :: फ़ंक्शन ()" "\ n"; } प्रकार * ऑपरेटर [] (int i) {वापसी (वी) [i]; }}; Int मुख्य (शून्य) {ए एक; कंटेनर & lt; A & gt; सी ; सी। फंक्शन (); c.v.push_back (& ​​amp; a); सी [0] - & gt; फ़ंक्शन (); वापसी 0; }   

आउटपुट:

कंटेनर :: फ़ंक्शन ()
ए :: फ़ंक्शन ()

अपडेट

यहां एक सूचक का उपयोग करने का एक उदाहरण है।

  int main (शून्य) {a a; कंटेनर & lt; A & gt; * पीसी = नया कंटेनर & lt; A & gt; ; पीसी-> फ़ंक्शन (); pC- & gt; v.push_back (& ​​amp; a); (* पीसी) [0] - & gt; फ़ंक्शन (); पीसी हटाएं; वापसी 0; }   

बेशक, आपको इस तरह एक कच्चे पॉइंटर का इस्तेमाल कभी नहीं करना चाहिए। आप इसके बजाय इस्तेमाल कर सकते हैं या आप अपनी मेमोरी को किसी वर्ग के लिए लपेट सकते हैं।

Comments

Popular posts from this blog

Verilog Error: output or inout port "Q" must be connected to a structural net expression -

jasper reports - How to center align barcode using jasperreports and barcode4j -

c# - ASP.NET MVC - Attaching an entity of type 'MODELNAME' failed because another entity of the same type already has the same primary key value -