list iterator的用法

tzg_dzq 2011-03-17 03:38:39
//头文件
typedef struct tagCard
{
char *face;
char *suit;
}Card;

typedef list<Card> oneGamerCardsList;
typedef list<oneGamerCardsList> AllGamersCardsList;

class CardClass
{
..........
void Dis(void) const;
private:
oneGamerCardsList mOneGamerCardsList;
AllGamersCardsList mAllGamersCardsList;
};

//实现文件
void CardClass::Dis(void) const
{
list<Card>::iterator oneItr;
list<oneGamerCardsList>::iterator allItr;

for (allItr = mAllGamersCardsList.begin(); allItr != mAllGamersCardsList.end(); ++allItr)
{
for (oneItr = allItr->begin(); oneItr != allItr->end(); ++oneItr)
{
cout<<oneItr->face<<"---"<<oneItr->suit<<endl;
}
cout<<"---------------------------"<<endl;
}
}

//编译错误

d:\vc2008_demo\projects_win32app\game001\game001\game001.cpp(65) : error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::list<_Ty>::_Const_iterator<_Secure_validation>' (or there is no acceptable conversion)
with
[
_Ty=oneGamerCardsList,
_Secure_validation=true
]
c:\program files\microsoft visual studio 9.0\vc\include\list(427): could be 'std::list<_Ty>::_Iterator<_Secure_validation> &std::list<_Ty>::_Iterator<_Secure_validation>::operator =(const std::list<_Ty>::_Iterator<_Secure_validation> &)'
with
[
_Ty=oneGamerCardsList,
_Secure_validation=true
]
while trying to match the argument list '(std::list<_Ty>::_Iterator<_Secure_validation>, std::list<_Ty>::_Const_iterator<_Secure_validation>)'
with
[
_Ty=oneGamerCardsList,
_Secure_validation=true
]
Build log was saved at "file://d:\vc2008_Demo\Projects_win32App\Game001\Game001\Debug\BuildLog.htm"
Game001 - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

//为什么为这样? 错在哪里?
//请高手指点!

...全文
371 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
tzg_dzq 2011-04-12
  • 打赏
  • 举报
回复
此问题在于:
要使用类来实现,同时实现拷贝构造函数和赋值函数。
谢谢给位的指点。
pengzhixi 2011-03-18
  • 打赏
  • 举报
回复
list<Card>::const_iterator oneItr;
list<oneGamerCardsList>::const_iterator allItr;
tzg_dzq 2011-03-18
  • 打赏
  • 举报
回复
第一个错误语句:for (allItr = mAllGamersCardsList.begin(); allItr != mAllGamersCardsList.end(); ++allItr)


我再试试数组char face[256]
h100037 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tzg_dzq 的回复:]

改为:
list<Card>::const_iterator oneItr;
list<oneGamerCardsList>::const_iterator allItr;
后就对了,
可为什么要这样呢?

list<Card>::iterator oneItr;
list<oneGamerCardsList>::iterator allItr;
这是用来干嘛的?
[/Quote]

你const函数, 不能改变成员变量, 所以必须用 const_iterator
h100037 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 pengzhixi 的回复:]

list<Card>::const_iterator oneItr;
list<oneGamerCardsList>::const_iterator allItr;
[/Quote]

++
maoxing63570 2011-03-18
  • 打赏
  • 举报
回复
void CardClass::Dis(void) const
const成员函数,承诺不会改变类的成员,所以你这里要用const_iterator
tzg_dzq 2011-03-18
  • 打赏
  • 举报
回复
改为:
list<Card>::const_iterator oneItr;
list<oneGamerCardsList>::const_iterator allItr;
后就对了,
可为什么要这样呢?

list<Card>::iterator oneItr;
list<oneGamerCardsList>::iterator allItr;
这是用来干嘛的?
  • 打赏
  • 举报
回复
typedef struct tagCard
{
char *face;
char *suit;
}Card;

汗一个
你的Card里面的face和suit都没分配内存...
建议
char face[256]
...
LinuxBirdMan 2011-03-17
  • 打赏
  • 举报
回复
第一个错误出现在哪个语句?
tzg_dzq 2011-03-17
  • 打赏
  • 举报
回复
我用的是vc++2008

单我把自定义的数据结构Card换位int时却没有出错。

这是为什么?
delphiwcdj 2011-03-17
  • 打赏
  • 举报
回复
编译器的问题?用的vc6?
LinuxBirdMan 2011-03-17
  • 打赏
  • 举报
回复
上面的代码没看出什么错误。。不知道是不是其它地方代码的问题。。

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧