作者daniel32333 (阿軒)
看板EE_DSnP
標題[問題] 關於iteartor迴圈
時間Mon Nov 15 22:41:30 2010
CmdParser::printHelps()的迴圈
本來是寫
CmdMap::iterator m;
for(m=_cmdMap.begin();m!=_cmdMap.end();m++)
後來跑出
cmdParser.cpp:100: error: no match for ‘operator=’ in ‘m = ((const
CmdParser*)this)->CmdParser::_cmdMap.std::map<_Key, _Tp, _Compare,
_Alloc>::begin [with _Key = const std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, _Tp = CmdExec*, _Compare =
std::less<const std::basic_string<char, std::char_traits<char>,
std::allocator<char> > >, _Alloc = std::allocator<std::pair<const
std::basic_string<char, std::char_traits<char>, std::allocator<char> >,
CmdExec*> >]()’
/usr/include/c++/4.4/bits/stl_tree.h:154: note: candidates are:
std::_Rb_tree_iterator<std::pair<const std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, CmdExec*> >&
std::_Rb_tree_iterator<std::pair<const std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, CmdExec*> >::operator=(const
std::_Rb_tree_iterator<std::pair<const std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, CmdExec*> >&)
缺少operator = 的錯誤訊息
之後把迴圈改成
for(CmdMap::iterator m=_cmdMap.begin();m!=_cmdMap.end();m++)
結果錯誤訊息是
cmdParser.cpp:99: error: conversion from ‘
std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, CmdExec*> >’ to non-scalar
type ‘std::_Rb_tree_iterator<std::pair<const std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, CmdExec*> >’ requested
請問一下 問題大概是出在哪? 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.184.13.168
1F:推 timrau:for(CmdMap::const_iterator m = _cmdMap.begin(); ...) 11/15 22:53
2F:→ daniel32333:感謝!話說寫Modnum class時很多函數少了const 11/15 22:54
3F:→ daniel32333:會compile失敗... 11/15 22:55
4F:推 hanmicky36:printHelp是const所以iterator也必須用const的 11/15 22:56
5F:推 BBSealion:其實我也找了很久怎樣把itr弄成const... 11/16 11:42
6F:→ BBSealion:const 放前放後都不行 要放中間 還真不直觀啊QQ 11/16 11:42
7F:推 Knossos:顆顆 這裡我也卡過... 11/16 13:27
8F:推 mp6k:不但要放中間還要加底線 超怪XD 11/16 16:09
9F:推 concise:因為 "iterator" 和 "const_iterator" (或 reverse 版本) 11/16 17:04
10F:→ concise:都只是 typedefs in the STL definition 11/16 17:05
11F:→ concise:跟直接使用的 const 沒有關係 11/16 17:06
12F:→ concise:底線乃是人為定義所致 11/16 17:07
13F:推 TommyKSHS:感謝樓上! 原來是這個原故… 11/16 17:16
14F:推 TommyKSHS: 緣 … 錯字 Orz 11/16 17:19
15F:推 concise:我會的東西都是樓上教的…… 11/16 18:48
16F:推 concise: (事實證明無蝦米也是會打錯字的 11/16 18:51
17F:推 TommyKSHS:因為腦中想錯字 結果打出來就是錯的字了 XD 11/16 19:16
18F:推 wintercobra:確認一下,const_iterator的const是不能修改*it的意思? 11/16 23:12
19F:推 ric2k1:對! 11/16 23:21
20F:→ tomap41017:這個錯誤訊息真的會莫名其妙XD 11/17 00:28
21F:推 timrau:可以試試STLfilt, 雖然個人覺得用途不大.... 11/17 07:53