C++中list使用和<<重载的问题

类Eatery中有一个list<Meal>mealList;SnackCart公有继承自Eatery但是在下面的函数中ostream&operator<<(ostream... 类Eatery中有一个list<Meal> mealList;
SnackCart公有继承自Eatery
但是在下面的函数中
ostream& operator <<(ostream& out,const SnackCart& e)
{
out<<e.owner<<endl;
list<Meal>::iterator it;
for (it=e.mealList.begin();it!=e.mealList.end();++it)
{
out<<it->getName()
<<endl<<it->getCost()
<<endl<<it->getRating()
<<endl;
}
return out;
}

for那一行报错
/home/zhaoxiang/workspace/EateryGuide/SnackCart.cpp|17|错误: no match 为‘operator=’在‘it = ((const SnackCart*)e)->SnackCart::<anonymous>.Eatery::mealList.std::list<_Tp, _Alloc>::begin [with _Tp = Meal, _Alloc = std::allocator<Meal>]()’中|

但是如果把这行改成
list<Meal> mealList=e.mealList;
for (it=mealList.begin();it!=mealList.end();++it)
就好了,但是这样就多费了一个list的空间
请问怎样才能使用类似我上面那个那样的
我的操作系统是Ubuntu9.04,IDE是Code::Blocks 8.02,编译器是GNU GCC
按一楼和二楼的改了之后,getName()那几行出错了,将‘const Meal’作为‘std::string Meal::getName()’的‘this’实参时丢弃了类型限定|
展开
 我来答
百度网友8a74d6561
2009-06-19 · TA获得超过151个赞
知道答主
回答量:140
采纳率:0%
帮助的人:133万
展开全部
对, 应该使用 常量迭代器。

ostream& operator <<(ostream& out,const SnackCart& e)

你的 const SnackCart& e; 申明的是 const的,所以对应的迭代器也应该使用const_iterator;

我的操作系统也是 Ubuntu9.04
我也用CodeBlocks,不过一般的短程序就直接开VIM写了 呵呵
vbtraz
2009-06-19 · TA获得超过5530个赞
知道大有可为答主
回答量:4152
采纳率:0%
帮助的人:4423万
展开全部
因为e是const的

list<Meal>::const_iterator it ; 这样试试看

getName 要声明成 const的。 所有不要改类的内容的函数都声明成const的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
whj_c
2009-06-20 · 超过76用户采纳过TA的回答
知道小有建树答主
回答量:228
采纳率:100%
帮助的人:140万
展开全部
ostream& operator <<(ostream& out,SnackCart& e)应该这样,不要const
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式