C++关于使用流迭代器>>和<<符号报错问题

CSDN问答频道为您的问题找到合适的答案,帮助用户获得可信赖的优质解答

原问题来自于CSDN问答频道,该问题更多解决方案见:https://ask.csdn.net/questions/7415244

问题描述:
已经重载了<<和>>符号,使用流迭代器,只有>>有效,<<报错,单独使用cin和cout都没有问题,就是流迭代器使用的时候有问题
C++关于使用流迭代器>>和<<符号报错问题_第1张图片

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++,bug,经验分享)