C++关于使用流迭代器>>和<<符号报错问题
Posted 问答小精灵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++关于使用流迭代器>>和<<符号报错问题相关的知识,希望对你有一定的参考价值。
CSDN问答频道为您的问题找到合适的答案,帮助用户获得可信赖的优质解答
原问题来自于CSDN问答频道,该问题更多解决方案见:https://ask.csdn.net/questions/7415244
问题描述:
已经重载了<<和>>符号,使用流迭代器,只有>>有效,<<报错,单独使用cin和cout都没有问题,就是流迭代器使用的时候有问题
istream& operator >>(istream &input, sales_data &s){
input >> s.bookno >> s.units_sold >> s.price;
if(input){
s.revenue = s.units_sold * s.price;
}
return input;
}
ostream& operator << (ostream &output,sales_data &s){
output << s.bookno <<" "<< s.units_sold << " "<<s.revenue<<" "<<s.avg_price()<<endl;
return output;
}
istream_iterator<sales_data> item_iter(cin),eof;
ostream_iterator<sales_data> out_iter(cout," ");
sales_data sum = *item_iter++;
while(item_iter!=eof){
if(sum.isbn()==item_iter->isbn()){
sum += *item_iter++;
}
else{
out_iter = sum;//出问题地方
sum += *item_iter++;
}
}
out_iter = sum;//出问题地方
解决方案:
很明显就是 const 问题。
ostream& operator << (ostream &output, const sales_data &s)
参照错误提示及函数原型:
ostream_iterator& operator=( const T& value );
即 ostream_iterator 只接受常量引用,将 value 再次传递给 ostream::<< 时出错,因为要求是非常量引用。
const 修饰后错误很可能转移到 avg_price() 函数上,因为你没有将其定义为 const 函数。
以上是关于C++关于使用流迭代器>>和<<符号报错问题的主要内容,如果未能解决你的问题,请参考以下文章
解决报错:在Python中使用property装饰器时,出现错误:TypeError: descriptor ‘setter‘ requires a ‘property‘ object but(代码片