告诉你应该只用g ++发出错误的一部分的特定错误消息。完整的错误看起来应该更接近以下(我已经缩短了路径,此输出为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.
那不是更友好的,是吗? :-)错误中有用的行是最后的行,而不是开头的行。错误消息以相反的顺序发出:第一个错误是实际的错误,然后后续的行通过源显示编译器如何到达那里的面包屑。最后一行显示了来源中的错误是:
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
在我的示例文件,t.cpp:16
是以下行:
string s(begin,end);
如果您注释掉该行(和它后面的行使用s
),你会发现你的源码编译没有错误。
在这一点上,它应该相当清楚,您正在使用std::string
构造函数不正确,这意味着您传递错误类型的参数。你给它的东西有一个std::string
(这就是std::basic_string<char>
),它期望的东西有一个char
。
如果您参考文档std::string
,你会发现,它确实有一个构造函数,看起来像:
template <typename InputIterator>
string(InputIterator first, InputIterator last);
这些输入迭代器允许您创建从一系列的字符串。但是,您将范围std::string
传递给构造函数。如果您将istream_iterator<string>
更改为istream_iterator<char>
,应该修复该错误。
哈哈,那真棒。它有助于提升吗?这正是它真正需要的地方。 – 2010-09-14 17:38:38
@TED:是:http://www.bdsoft.com/dist/vcmeta-demo.txt(它更好,但不是很棒) – 2010-09-14 17:50:21