Die besondere Fehlermeldung Sie nur einen Teil der von g zeigen sollte ++ ausgegeben Fehler sein:
In diesem Fall sollten Sie Ihre Iteratoren über char
nicht string
laufen. Der vollständige Fehler sollte etwas näher folgt aussehen (ich habe die Wege verkürzt, und dieser Ausgang von 4.1.2):
basic_string.tcc: In static member function 'static _CharT* std::basic_string<_CharT, _Traits, _Alloc>::_S_construct(_InIterator, _InIterator, const _Alloc&, std::input_iterator_tag) [with _InIterator = std::istream_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, char, std::char_traits<char>, int>, _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]':
basic_string.h:1449: instantiated from 'static _CharT* std::basic_string<_CharT, _Traits, _Alloc>::_S_construct_aux(_InIterator, _InIterator, const _Alloc&, __false_type) [with _InIterator = std::istream_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, char, std::char_traits<char>, int>, _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]'
basic_string.h:1464: instantiated from 'static _CharT* std::basic_string<_CharT, _Traits, _Alloc>::_S_construct(_InIterator, _InIterator, const _Alloc&) [with _InIterator = std::istream_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, char, std::char_traits<char>, int>, _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]'
basic_string.tcc:241: instantiated from 'std::basic_string<_CharT, _Traits, _Alloc>::basic_string(_InputIterator, _InputIterator, const _Alloc&) [with _InputIterator = std::istream_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, char, std::char_traits<char>, int>, _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]'
t.cpp:16: instantiated from here
Line 101: error: cannot convert 'const std::basic_string<char, std::char_traits<char>, std::allocator<char> >' to 'char' in assignment
compilation terminated due to -Wfatal-errors.
Das ist nicht viel freundlicher, 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 eigentliche Fehler, dann geben die folgenden Zeilen Brotkrumen durch die Quelle, die zeigen, wie der Compiler dorthin gelangt ist. Die letzte Zeile zeigt, wo in Ihrer Quelle der Fehler war:
t.cpp:16: instantiated from here
Line 101: error: cannot convert '
const std::basic_string<char, std::char_traits<char>, std::allocator<char> >' to
'char' in assignment
In meiner Beispieldatei t.cpp:16
die folgende Zeile:
string s(begin,end);
Wenn Sie diese Zeile aus kommentieren (und die Zeile nach ihm, dass verwendet s
), finden Sie, dass Ihre Quelle kompiliert ohne Fehler.
An diesem Punkt sollte ziemlich klar sein, dass Sie den std::string
-Konstruktor falsch verwenden, was bedeutet, dass Sie es die falschen Arten von Argumenten übergeben. Sie geben es etwas, das eine std::string
hat (das ist, was std::basic_string<char>
ist) und es erwartet etwas, das eine char
hat.
Wenn Sie die Dokumentation für std::string
konsultieren, werden Sie feststellen, dass es einen Konstruktor hat, die wie folgt aussieht:
template <typename InputIterator>
string(InputIterator first, InputIterator last);
Diese Eingabe-Iteratoren können Sie eine Zeichenfolge aus einer Reihe von Zeichen erstellen. Sie übergeben jedoch einen Bereich von std::string
s an den Konstruktor. Wenn Sie Ihre istream_iterator<string>
s zu istream_iterator<char>
ändern, sollte der Fehler beheben.
Lol, das ist genial. Hilft es beim Boosten? Das ist, wo es wirklich gebraucht wird. –
@TED: Ja: http://www.bdsoft.com/dist/vcmeta-demo.txt (es ist besser, aber nicht grandios) –