作者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