2015-12-18 8 views
9

ich die folgende Fehlermeldung erhalten:Fehler: kann nicht konvertieren 'std :: basic_string <char> :: iterator ...' to 'const char * für Argument '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*)' 

Für aus irgendeinem Grund kompiliert mein Programm perfekt, wenn ich an einem Mac arbeite ... aber sobald ich einen Linux-Rechner benutze, taucht dieser Fehler an mehreren Stellen auf. (Wenn jemand erklären könnte, warum dies der Fall ist, das wäre toll!)

Hier ist einer der Fälle, in denen der Fehler oben knallt:

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

Genauer gesagt, wird der Fehler aus dieser Linie kommt:

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

Kann jemand dieses Problem angehen?

+0

Es funktioniert [hier] (https://ideone.com/jZh5x5). Kannst du ein [mcve] produzieren? – NathanOliver

+3

Es ist nicht die richtige Remove-Funktion abholen, haben Sie ? (Leider gibt es eine andere Entfernung in ) – Borgleader

+0

Lesen Sie den Compiler-Fehler richtig. Sie haben den wichtigen Teil des Fragetitels verpasst. Es sagt Ihnen, dass es versucht, 'int remove (const char *)' aufzurufen, was eindeutig nicht die Funktion ist, die Sie aufrufen möchten. –

Antwort

15

Sie haben #include <algorithm> vergessen, wo sich std::remove befindet. Ohne dies weiß Ihr Compiler nur this std::remove (ich bekomme den gleichen Fehler mit Visual C++ 14), die in indirekt enthalten <cstdio> Header definiert ist.

Unterschiedliches Verhalten unter Compilern ist das Ergebnis verschiedener #include Hierarchien der Standardbibliotheksimplementierungen.