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

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

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条)

报告相同问题?

悬赏问题

  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。