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++关于使用流迭代器>>和<<符号报错问题的主要内容,如果未能解决你的问题,请参考以下文章

C++ 迭代器失效 ++报错

C++ 迭代器失效 ++报错

输入迭代器是不是只能在赋值的右手符号上被取消引用?

c++中迭代器的问题为啥这样会报错?

指向对象的指针映射上的迭代器作为关键 C++

解决报错:在Python中使用property装饰器时,出现错误:TypeError: descriptor ‘setter‘ requires a ‘property‘ object but(代码片