2015-04-27 17 views
15

से जुड़े संकलन विफलता कृपया कोई बता सकता है कि निम्न कोड क्लैंग 3.5 का उपयोग क्यों संकलित नहीं करता है।कंस्ट्रक्शन विफलता वेक्टर std :: स्ट्रिंग

त्रुटि रिपोर्ट 'एल्गोरिदम में' कोई व्यवहार्य ओवरलोडेड '=' है।

std::vector<const std::string> m_messages; 
std::vector<const std::string>::iterator iter; 
... 

if (iter != m_messages.end()) 
{ 
    m_messages.erase(iter);  // compilation error 
} 

अगर मैं के रूप में m_messages घोषित: std::vector<std::string> m_messages; तो यह ठीक संकलित करता है।

std::vector<const std::string> m_messages; 

और

std::vector<std::string> m_messages; 

TIA:

इसके अलावा, के बीच अंतर क्या है।

उत्तर

16

तत्व को मिटाने के लिए, दाईं ओर वाले तत्वों को स्थानांतरित किया जाना चाहिए (बाईं ओर स्थानांतरित)।

चूंकि आपके तार const हैं, इसलिए पुराने तत्व को ओवरराइट नहीं किया जा सकता है (= ऑपरेटर के माध्यम से) इसलिए त्रुटि।

+0

करता है के असाइनमेंट ऑपरेटर इसका मतलब यह नहीं समझ में आता है स्थिरांक का एक वेक्टर के लिए ले जाने के जब तक अपवाद प्रतिलिपि निर्माता द्वारा फेंक दिया जाता है स्ट्रिंग्स अगर तत्वों को हटाया जा सकता है? – ksl

+0

मुझे पूरा यकीन नहीं है कि मैं इसकी पुष्टि करने के लिए पर्याप्त रूप से सराहना करता हूं, लेकिन वेक्टर कैसे कार्यान्वित किया जाता है, ऐसा लगता है .. लेकिन यह निश्चित रूप से समझता है कि यह एक कंटेनर है जो इसका समर्थन करता है (उदाहरण के लिए विनाशक + प्रतिलिपि निर्माता)। शायद बूस्ट लाइब्रेरी में कुछ है? –

+0

ठीक है धन्यवाद। शायद मैं उससे संबंधित एक अलग सवाल के रूप में विशेष रूप से अगर मुझे यहां कोई जवाब नहीं मिलता है। – ksl

5

क्या इसका मतलब यह है कि यदि तत्वों को हटाया जा सकता है तो इसका कोई मतलब नहीं है कि कॉन्स स्ट्रिंग का वेक्टर होना चाहिए? Yes at least what the standard says

23.3.7.5 वेक्टर संशोधक [vector.modifiers]

इटरेटर मिटा (const_iterator स्थिति); इटेटरेटर मिटाएं (const_iterator पहले, const_iterator अंतिम);

प्रभाव: मिटाने के बिंदु पर या उसके बाद पुनरावृत्तियों और संदर्भों को अमान्य करता है।

जटिलता: टी का नाशक मिट तत्वों की संख्या के बराबर समय की संख्या कहा जाता है, लेकिन टी के इस कदम असाइनमेंट ऑपरेटर वेक्टर में तत्वों की संख्या के बाद के बराबर समय की संख्या कहा जाता है मिटाए गए तत्व

फेंकता: कुछ नहीं, निर्माता, असाइनमेंट ऑपरेटर ले जाते हैं, या टी

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