El mensaje de error en particular mostrar sólo debe ser parte del error emitido por g ++. El error total debe ser algo más cerca de lo siguiente (he acortado los caminos, y esta salida es desde 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.
Eso no es mucho más agradable, ¿verdad? :-) Las líneas útiles en el error son las líneas al final, no las líneas al principio.El mensaje de error se emite en orden inverso: el primer error es el error real, luego las líneas siguientes le dan migas de pan a través de la fuente que muestra cómo llegó el compilador. La última línea muestra donde en su fuente era el error:
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
En mi archivo de ejemplo, t.cpp:16
es la siguiente línea:
string s(begin,end);
Si usted comenta que la línea (y la línea siguiente de esa usa s
), encontrará que su fuente compila sin error.
En este punto, debe quedar bastante claro que está utilizando el constructor std::string
incorrectamente, lo que significa que está pasando los tipos de argumentos incorrectos. Le está dando algo que tiene un std::string
(eso es lo que std::basic_string<char>
es) y está esperando algo que tenga un char
.
Si se consulta la documentación de std::string
, encontrará que tiene un constructor que se parece a:
template <typename InputIterator>
string(InputIterator first, InputIterator last);
Esos iteradores de entrada le permiten crear una cadena de una serie de caracteres. Sin embargo, usted está pasando un rango de std::string
s al constructor. Si cambia su istream_iterator<string>
s al istream_iterator<char>
, esto debería corregir el error.
Lol, eso es increíble. ¿Ayuda con el impulso? Ahí es donde realmente se necesita. –
@TED: Sí: http://www.bdsoft.com/dist/vcmeta-demo.txt (es mejor, pero no fenomenal) –