2015-12-18 22 views
9

Dostaję następujący błąd:błąd: nie można przekonwertować 'std :: basic_string <char> :: iterator ...' do 'const char * dla argumentu '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*)' 

Dla z jakiegoś powodu mój program doskonale się kompiluje, kiedy pracuję na komputerze Mac ... ale kiedy używam komputera z Linuksem, ten błąd pojawia się w więcej niż jednym miejscu. (Jeśli ktoś może wyjaśnić, dlaczego tak się dzieje, że byłoby świetnie!)

Oto jeden z przypadków, gdzie wyskakuje błąd:

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 ... 
} 

Dokładniej, błąd jest pochodzących z tej linii:

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

Czy ktoś wie, jak rozwiązać ten problem?

+0

Działa [tutaj] (https://ideone.com/jZh5x5). Czy potrafisz wyprodukować [mcve]? – NathanOliver

+3

Nie można pobrać prawidłowej funkcji usuwania, czy uwzględniono ? (Niestety nie ma innego usunięcia w ) – Borgleader

+0

Odczytaj błąd kompilatora. Pominąłeś ważną część w tytule pytania. Mówi ci, że próbuje wywołać 'int remove (const char *)', co oczywiście nie jest funkcją, którą chcesz wywołać. –

Odpowiedz

15

Zapomniałeś (aś) o #include <algorithm>, gdzie znajduje się std::remove. Bez tego twój kompilator zna tylko this std::remove (otrzymuję ten sam błąd w Visual C++ 14), który jest zdefiniowany w pośrednio zawarty nagłówek <cstdio>.

Różne zachowania wśród kompilatorów wynikają z różnych hierarchii standardowych implementacji bibliotek w postaci #include.

Powiązane problemy