干啥啥不行,吃饭第一名 2021-04-09 11:49 采纳率: 100%
浏览 229
已采纳

已经重载了<<和>>符号,使用流迭代器,只有>>有效,<<报错

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;
}

单独使用cin和cout都没有问题,就是流迭代器使用的时候有问题

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;//出问题地方
  • 写回答

12条回答 默认 最新

  • 樱木新之助 2021-04-13 14:34
    关注

    很明显就是 const 问题。

    ostream& operator << (ostream &output, const sales_data &s)

    参照错误提示及函数原型:

    ostream_iterator& operator=( const T& value );

    即 ostream_iterator 只接受常量引用,将 value 再次传递给 ostream::<< 时出错,因为要求是非常量引用。

    const 修饰后错误很可能转移到 avg_price() 函数上,因为你没有将其定义为 const 函数。请仔细阅读错误提示,一字一字地读。

    真诚建议:创建完整代码 repo,方便坛友们了解所有细节,解决问题后直接提交 pr 给你。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(11条)

报告相同问题?