[問題] 關於iteartor迴圈

看板EE_DSnP作者 (阿軒)時間13年前 (2010/11/15 22:41), 編輯推噓14(1407)
留言21則, 11人參與, 最新討論串1/1
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

11/15 22:53, , 1F
for(CmdMap::const_iterator m = _cmdMap.begin(); ...)
11/15 22:53, 1F

11/15 22:54, , 2F
感謝!話說寫Modnum class時很多函數少了const
11/15 22:54, 2F

11/15 22:55, , 3F
會compile失敗...
11/15 22:55, 3F

11/15 22:56, , 4F
printHelp是const所以iterator也必須用const的
11/15 22:56, 4F

11/16 11:42, , 5F
其實我也找了很久怎樣把itr弄成const...
11/16 11:42, 5F

11/16 11:42, , 6F
const 放前放後都不行 要放中間 還真不直觀啊QQ
11/16 11:42, 6F

11/16 13:27, , 7F
顆顆 這裡我也卡過...
11/16 13:27, 7F

11/16 16:09, , 8F
不但要放中間還要加底線 超怪XD
11/16 16:09, 8F

11/16 17:04, , 9F
因為 "iterator" 和 "const_iterator" (或 reverse 版本)
11/16 17:04, 9F

11/16 17:05, , 10F
都只是 typedefs in the STL definition
11/16 17:05, 10F

11/16 17:06, , 11F
跟直接使用的 const 沒有關係
11/16 17:06, 11F

11/16 17:07, , 12F
底線乃是人為定義所致
11/16 17:07, 12F

11/16 17:16, , 13F
感謝樓上! 原來是這個原故…
11/16 17:16, 13F

11/16 17:19, , 14F
緣 … 錯字 Orz
11/16 17:19, 14F

11/16 18:48, , 15F
我會的東西都是樓上教的……
11/16 18:48, 15F

11/16 18:51, , 16F
(事實證明無蝦米也是會打錯字的
11/16 18:51, 16F

11/16 19:16, , 17F
因為腦中想錯字 結果打出來就是錯的字了 XD
11/16 19:16, 17F

11/16 23:12, , 18F
確認一下,const_iterator的const是不能修改*it的意思?
11/16 23:12, 18F

11/16 23:21, , 19F
對!
11/16 23:21, 19F

11/17 00:28, , 20F
這個錯誤訊息真的會莫名其妙XD
11/17 00:28, 20F

11/17 07:53, , 21F
可以試試STLfilt, 雖然個人覺得用途不大....
11/17 07:53, 21F
文章代碼(AID): #1CuKQVJ3 (EE_DSnP)