告訴你應該只用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