2015-12-18 6 views
9

मैं निम्न त्रुटि हो रही है:त्रुटि: करने के लिए 'स्थिरांक चार * तर्क के लिए' में बदल सकते हैं नहीं 'std :: basic_string <char> :: iterator ...' 1 '...'

error: cannot convert 'std::basic_string<char>::iterator {aka __gnu_cxx::__normal 
_iterator<char*, std::basic_string<char> >}' to 'const char*' for argument '1' 
to 'int remove(const char*)' 

के लिए कुछ कारण, जब मैं मैक पर काम कर रहा हूं, तो मेरा प्रोग्राम पूरी तरह से संकलित होता है ... लेकिन एक बार जब मैं लिनक्स मशीन का उपयोग करता हूं, तो यह त्रुटि एक से अधिक स्थानों में पॉप अप हो जाती है। (यदि किसी को भी इस क्यों होता है समझा सकता है, कि बहुत अच्छा होगा!)

यहाँ जिन मामलों में त्रुटि पॉप अप में से एक है:

SomeClass::SomeClass(string t, string art, Time dur) { 
    char chars[] = ","; 
    t.erase(std::remove(t.begin(), t.end(), chars[0]), t.end()); 
    art.erase(std::remove(art.begin(), art.end(), chars[0]), art.end()); 
    // Some more code ... 
} 

अधिक विशेष रूप से, त्रुटि इस लाइन से आ रही है:

t.erase(std::remove(t.begin(), t.end(), chars[0]), t.end()); 

क्या कोई इस समस्या से संपर्क करने के बारे में जानता है?

+0

यह काम कर रहा है [यहां] (https://ideone.com/jZh5x5)। क्या आप एक [एमसीवी] उत्पादन कर सकते हैं? – NathanOliver

+3

यह सही निकालने का कार्य नहीं उठा रहा है, क्या आपने शामिल किया था? (दुख की बात है में एक और निकालें) – Borgleader

+0

संकलक त्रुटि को ठीक से पढ़ें। आप प्रश्न शीर्षक में महत्वपूर्ण भूमिका से चूक गए। यह आपको बताता है कि यह 'int remove (const char *)' को कॉल करने का प्रयास कर रहा है, जो स्पष्ट रूप से वह कार्य नहीं है जिसे आप कॉल करना चाहते हैं। –

उत्तर

15

आप #include <algorithm> पर भूल गए, जहां std::remove स्थित है। इसके बिना, आपके कंपाइलर को केवल this std::remove के बारे में पता है (मुझे विजुअल सी ++ 14 के साथ एक ही त्रुटि मिलती है), जिसे अप्रत्यक्ष रूप से <cstdio> शीर्षलेख में परिभाषित किया गया है।

मानक लाइब्रेरी कार्यान्वयन के विभिन्न #include पदानुक्रमों का परिणाम है।

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