Wednesday 15 January 2014

c++ - Can not insert own structure in standard vector but string can -


मैंने सरल संरचना बनाई:

  struct sToken {std :: string token; अहस्ताक्षरित int lineNb; };   

मैं यह संरचना मानक वेक्टर में push_back () विधि का उपयोग करना चाहता हूं, लेकिन जब मैं यह करता हूँ:

  std :: वेक्टर & LT; sToken & gt; परिणाम; result.push_back (tkn); // कंपाइलर त्रुटि   

मुझे निम्न त्रुटि संदेश मिलते हैं: ऑपरेटर के लिए कोई मेल नहीं है == में __first__gnu_cxx :: __ सामान्य_ईटरेटर & lt; _Iterator, _Container & gt; :: ऑपरेटर * & lt; sToken *, std :: वेक्टर & LT; sToken & gt; & Gt; () == में stl_algo.h

लेकिन अगर मैं मानक स्ट्रिंग रखना चाहता हूँ सब कुछ ठीक है:

  std :: vector & lt; std: : स्ट्रिंग & gt; परिणाम; result.push_back (tkn.token); // ओके   

मुझे लगता है कि संकलक शिकायत कर रहा है ऑपरेटर == , लेकिन क्यों? मुझे क्यों ऑपरेटर == को इस स्थिति में क्यों प्रदान करना चाहिए जब मैं केवल वेक्टर में स्ट्रेट करना चाहता हूं? और अगर मुझे इस ऑपरेटर को लागू करना होगा, तो क्या आप मुझे एक विचार दे सकते हैं कि यह कैसे लागू किया जाना चाहिए। धन्यवाद।

जैसा आपने कहा था कि आप std :: find का उपयोग कर रहे हैं, आपको ऑपरेटर = = आपके स्ट्रक्चर पर

  struct sToken {std :: string token; अहस्ताक्षरित int lineNb; बूल ऑपरेटर == (कॉन्स्ट सैटोक & amp; रेफरी) {ref.comoken.compare वापसी (यह- & gt; टोकन) == 0; }};   

इस उदाहरण में, टोकन का उपयोग दूसरों से इस संरचना (इंडेंटेट) को अलग करने के लिए किया जाएगा यदि आप std :: find का उपयोग करना चाहते हैं तो std ::

संपादन

आप चाहते हैं कि आप इसे बदल सकते हैं। स्ट्रिंग tkn.token आपकी टिप्पणी कहता है तो आपको इसे इस तरह अधिभार करना होगा:

  bool operator == (const std :: string ctoken) {वापसी ctoken.compare (यह- & gt; टोकन) == 0; }   

आपको ऐसा करना होगा क्योंकि std :: find वेक्टर सदस्यों की आपके soken वस्तु के साथ तुलना करेगा।

No comments:

Post a Comment