Die spezifische Fehlermeldung, die Sie anzeigen, sollte nur Teil des Fehlers sein, der von g++ ausgegeben wird. Der vollständige Fehler sollte in etwa wie folgt aussehen (ich habe die Pfade gekürzt, und diese Ausgabe stammt von 4.1.2):
basic_string.tcc: In statischer Elementfunktion 'static _CharT* std::basic_string<_CharT, _Traits, _Alloc>::_S_construct(_InIterator, _InIterator, const _Alloc&, std::input_iterator_tag) [mit _InIterator = std::istream_iterator, std::allocator >, char, std::char_traits, int>, _CharT = char, _Traits = std::char_traits, _Alloc = std::allocator]':
basic_string.h:1449: instanziiert von 'static _CharT* std::basic_string<_CharT, _Traits, _Alloc>::_S_construct_aux(_InIterator, _InIterator, const _Alloc&, __false_type) [mit _InIterator = std::istream_iterator, std::allocator >, char, std::char_traits, int>, _CharT = char, _Traits = std::char_traits, _Alloc = std::allocator]'
basic_string.h:1464: instanziiert von 'static _CharT* std::basic_string<_CharT, _Traits, _Alloc>::_S_construct(_InIterator, _InIterator, const _Alloc&) [mit _InIterator = std::istream_iterator, std::allocator >, char, std::char_traits, int>, _CharT = char, _Traits = std::char_traits, _Alloc = std::allocator]'
basic_string.tcc:241: instanziiert von 'std::basic_string<_CharT, _Traits, _Alloc>::basic_string(_InputIterator, _InputIterator, const _Alloc&) [mit _InputIterator = std::istream_iterator, std::allocator >, char, std::char_traits, int>, _CharT = char, _Traits = std::char_traits, _Alloc = std::allocator]'
t.cpp:16: instanziiert von hier
Zeile 101: Fehler: kann 'const std::basic_string, std::allocator >' nicht in 'char' umwandeln in der Zuweisung
Kompilierung aufgrund von -Wfatal-errors abgebrochen.
Das ist nicht besonders freundlich, oder? :-) Die nützlichen Zeilen im Fehler sind die Zeilen am Ende, nicht die Zeilen am Anfang. Die Fehlermeldung wird in umgekehrter Reihenfolge ausgegeben: der erste Fehler ist der tatsächliche Fehler, dann zeigen die folgenden Zeilen Ihnen den Weg durch den Quellcode, wie der Compiler dorthin gelangt ist. Die letzte Zeile zeigt an, wo in Ihrem Quellcode der Fehler war:
t.cpp:16: instanziiert von hier
Zeile 101: Fehler: kann '
const std::basic_string, std::allocator >' nicht in
'char' umwandeln in der Zuweisung
In meiner Beispieldatei ist die Zeile t.cpp:16
folgende:
string s(begin,end);
Wenn Sie diese Zeile auskommentieren (und die darauf folgende Zeile, die s
verwendet), werden Sie feststellen, dass Ihr Quellcode ohne Fehler kompiliert.
An diesem Punkt sollte es ziemlich klar sein, dass Sie den std::string
Konstruktor falsch verwenden, was bedeutet, dass Sie ihm die falschen Argumenttypen übergeben. Sie geben ihm etwas, das ein std::string
hat (das ist, was std::basic_string
ist) und es erwartet etwas, das ein char
hat.
Wenn Sie die Dokumentation für std::string
konsultieren, werden Sie feststellen, dass es einen Konstruktor gibt, der wie folgt aussieht:
template
string(InputIterator first, InputIterator last);
Diese Eingabeiteratoren ermöglichen es Ihnen, einen String aus einem Bereich von Zeichen zu erstellen. Sie geben jedoch einen Bereich von std::string
s an den Konstruktor weiter. Wenn Sie Ihre istream_iterator
s in istream_iterator
ändern, sollte das den Fehler beheben.