标题:求大神,帮忙分析下程序问题的原因
只看楼主
心空之上
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2018-5-29
结帖率:83.33%
已结贴  问题点数:10 回复次数:6 
求大神,帮忙分析下程序问题的原因
程序代码:
#include <iostream>
#include <string>
#include <vector>
#include <cctype>
#include <stdexcept>
using namespace std;
using std::string;
using std::vector;

struct Sales_data {
    Sales_data& combine(const Sales_data&);
    string isbn() const { return bookNo; }
    double avg_price() const; 
     
    string bookNo;
    unsigned units_sold = 0;
    double revenue = 0.0;
}; 
Sales_data add(const Sales_data&, const Sales_data&);
ostream &print(ostream, const Sales_data&);
istream &read(istream, Sales_data&);

int main()
{
    Sales_data total;
    
    if(read(cin, total))
    {
        Sales_data trans;
        while(read(cin, trans)
        {
            if(total.isbn() == trans.isbn())
            {
                (trans);
            }
            else
            {
                print(cout, total) << endl;
                cout << '\n';
                total = trans;
            }
        }
        print(cout, total) << endl;
        
    }
    else
    {
        cerr << "No data?!" << endl;
        return -1;
    }
    return 0;
}

Sales_data& Sales_data::combine(const Sales_data &rhs)
{
    units_sold += rhs.units_sold;
    revenue += rhs.revenue;
    return *this;
}
double Sales_data::avg_price() const
{
    if(units_sold)
        return revenue/units_sold;
    else
        return 0;
}
Sales_data add(const Sales_data &lhs, const Sales_data &rhs)
{
    Sales_data sum = lhs;
    (rhs);
    return sum; 
}
ostream &print(ostream &os, const Sales_data &item)
{
    os << item.isbn() << " " << item.units_sold << " " << item.revenue << " " << item.avg_price() << endl;
    return os; 
}
istream &read(istream &is, Sales_data &item)
{
    double price = 0;
    is >> item.bookNo >> item.units_sold >> price;
    item.revenue = item.units_sold * price;
    return is;
}

这是问题程序的代码,无法通过编译。
编译器的错误提示是[Error] use of deleted function 'std::basic_istream<char>::basic_istream(const std::basic_istream<char>&)'
我觉得问题出在read函数上,于是我把read和print函数的定义放在main函数上面,竟然通过编译了。但是我不明白错误的原因,求大神指教。
搜索更多相关主题的帖子: std const return read item 
2019-03-24 12:34
心空之上
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2018-5-29
得分:0 
程序代码:
#include <iostream>
#include <string>
#include <vector>
#include <cctype>
#include <stdexcept>
using namespace std;
using std::string;
using std::vector;

struct Sales_data {
    Sales_data& combine(const Sales_data&);
    string isbn() const { return bookNo; }
    double avg_price() const; 
     
    string bookNo;
    unsigned units_sold = 0;
    double revenue = 0.0;
}; 
Sales_data add(const Sales_data&, const Sales_data&);
ostream &print(ostream &os, const Sales_data &item)
{
    os << item.isbn() << " " << item.units_sold << " " << item.revenue << " " << item.avg_price() << endl;
    return os; 
}
istream &read(istream &is, Sales_data &item)
{
    double price = 0;
    is >> item.bookNo >> item.units_sold >> price;
    item.revenue = item.units_sold * price;
    return is;
}

int main()
{
    Sales_data total;
    
    if(read(cin, total))
        Sales_data trans;
        while(read(cin, trans))
            if(total.isbn() == trans.isbn())
            {
                (trans);
            else
            {
                print(cout, total) << endl;
                cout << '\n';
                total = trans;
            }
        }
        print(cout, total) << endl;
        
    }
    else
    {
        cerr << "No data?!" << endl;
        return -1;
    }
    return 0;
}

Sales_data& Sales_data::combine(const Sales_data &rhs)
{
    units_sold += rhs.units_sold;
    revenue += rhs.revenue;
    return *this;
}
double Sales_data::avg_price() const
{
    if(units_sold)
        return revenue/units_sold;
    else
        return 0;
}
Sales_data add(const Sales_data &lhs, const Sales_data &rhs)
    Sales_data sum = lhs;
    (rhs);
    return sum; 
}

这是通过编译的代码

[此贴子已经被作者于2019-3-24 12:37编辑过]

2019-03-24 12:36
心空之上
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2018-5-29
得分:0 

这是错误提示
2019-03-24 12:37
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
得分:10 
所有的流都是不可以被复制的
所以只能传对应的引用或者指针
2019-03-24 14:14
心空之上
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2018-5-29
得分:0 
回复 4楼 Jonny0201
对呀,我声明和定义里传的都是流的引用呀。调用read函数时传入cin有错误吗?
2019-03-24 15:22
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
得分:0 
回复 5楼 心空之上
你检查一下第一个代码的声明
2019-03-24 17:52
心空之上
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2018-5-29
得分:0 
回复 6楼 Jonny0201
哎呀,我太粗心了,没仔细看自己的声明就来问问题,谢谢你了!
2019-03-24 18:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-493758-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.135052 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved