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’实参时丢弃了类型限定| 展开
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’实参时丢弃了类型限定| 展开
展开全部
因为e是const的
list<Meal>::const_iterator it ; 这样试试看
getName 要声明成 const的。 所有不要改类的内容的函数都声明成const的
list<Meal>::const_iterator it ; 这样试试看
getName 要声明成 const的。 所有不要改类的内容的函数都声明成const的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
ostream& operator <<(ostream& out,SnackCart& e)应该这样,不要const
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询