文件   sales_data.h

#include <iostream>
#include <string>
using namespace std;
struct sales_data{
public:sales_data();            sales_data(const std::string &s,unsigned n,double p); sales_data(std::string &s);sales_data(istream &is);friend istream &read(istream &is,sales_data &s);friend ostream &print(ostream &os,sales_data &s);string isbn()const;sales_data &combine(sales_data &);double avg_price()const;ostream & dis(ostream & os)const;
private:std::string bookno;unsigned sales_cnt ;double revenue  ;};

文件   function.cc

#include <iostream>
#include <string>
#include "sales_data.h"
using namespace std;
sales_data::sales_data():bookno(""),sales_cnt(0),revenue(0.0){cout << "call sales_data() " << endl;}
sales_data::sales_data(const std::string &s,unsigned n,double p):bookno(s),sales_cnt(n),revenue(n * p)
{cout << "call sales_data(std::string &s,unsigned n,double p) " << endl;}
sales_data::sales_data(std::string &s):sales_data(s,0,0){cout << "call 3" <<endl;}
sales_data::sales_data(istream & is):sales_data(){read(is,*this);cout << "call 4;" << endl;}istream &read(istream &is,sales_data &s){double price;cout << "Enter BookNumber/Sales counts/Price: ";is >> s.bookno >> s.sales_cnt >> price;s.revenue = price * s.sales_cnt;return is;
}
ostream &print(ostream &os,sales_data &s){os << "\n    BookNumber: " << s.bookno;os <<"\n    Sales counts: " << s.sales_cnt;os << "\n    Sales revenue: " << s.revenue << endl;
}
//sales_data &add(sales_data &l,sales_data r){
//  combine(l,r);
//  return l;
//}
string sales_data::isbn()const{return  bookno;
}
sales_data & sales_data::combine(sales_data& s){if(sales_data::bookno != s.isbn()){cout << "WRONG!!! Their isbns are not equal!!!"  <<endl;}else{sales_cnt += s.sales_cnt;revenue += s.revenue;}return *this;
}double sales_data::avg_price()const{if (sales_cnt == 0)return 0;else{return revenue/sales_cnt;}}
ostream & sales_data::dis(ostream &os)const{cout << "Book Number: " << bookno <<endl;cout << "Revenue: " << revenue <<endl;cout << "Sales counts: "<< sales_cnt << endl;return os;
}sales_data & add(sales_data &l,sales_data &r){l.combine(r);return l;
}

文件 main.cc

#include <iostream>
#include <string>
#include "sales_data.h"
using namespace std;
int main()
{sales_data i;string s("12345");i.combine(s);                //立刻会报错print(cout,i);return 0;
}

g++编译器如下结果:

r@r-Sys:~/7.5.4/ex/2$ g++ function.cc main.cc -o 123
main.cc: In function ‘int main()’:
main.cc:9:14: error: cannot bind non-const lvalue reference of type ‘sales_data&’ to an rvalue of type ‘sales_data’i.combine(s);

这里错误原因是,main.cc中 s是一个string对象,执行 i.combine(s)时候,s通过转换构造函数隐式类型转换为临时量sales_data,但是这个临时量不能够转换为  combine的参数类型 sales_data &

×××××sales_data通过类型转换形成的临时对象不能转换成sales_data (非常量引用)相关推荐

  1. 把json对象串转换成map对象

    2019独角兽企业重金招聘Python工程师标准>>> /**    * nc只支持简单的   * 把json对象串转换成map对象    * @param jsonObjStr e ...

  2. 如何将PHP对象数组转换成普通数组

    /** * 对象数组转为普通数组 * * AJAX提交到后台的JSON字串经decode解码后为一个对象数组, * 为此必须转为普通数组后才能进行后续处理, * 此函数支持多维数组处理. * * @p ...

  3. java object 转byte_Java将对象Object转换成Byte字节数组

    Java将对象Object转换成Byte字节数组的代码如下: /** * @from www.ityuan.com * @Description: Java将对象Object转换成Byte字节数组 * ...

  4. CAD中如何将图形对象快速转换成三维曲面?

    上节CAD三维绘图教程小编给大家分享了浩辰CAD软件中将图形对象转换为三维实体的操作技巧,你学会了吗?今天小编将接着上节内容给大家分享浩辰CAD软件中将图形对象快速转换成三维曲面的相关操作技巧,感兴趣 ...

  5. js 列表对象数据 转换成 excel格式数据

    代码实现 async exportExcel() {// element-ui loading效果参数this.exportLoading = true// 获取列表数据请求 const { rows ...

  6. JAVA8 利用stream流将一个对象集合转换成另一个对象集合

    // 从数据库中查询出的对象集合List<OperationStation> operationStations = operationStationJoinMapper.selectJo ...

  7. 关于代码中生成HSSFWorkbook对象,转换成输入流,上传到服务器.下载的xls文件打开报错问题

    今天在做项目开发是遇到一个问题,就是在java代码中创建HSSFWorkbook表格写入数据后,不直接返回给前端下载,而是上传到服务器: 开始直接通过 InputStream is = new Byt ...

  8. js将1,2,3转换成周一、周二、周三(对象日期转换成字符串)

    当后台返回的数据是数组格式的["1","3","5"],但是前台需要展示成周一.周三.周五的时候,可以使用下面的方法 convertData ...

  9. 临时对象与NRV技术

    临时对象与NRV技术 <More Effective C++>中讲到,在C++中真正的临时对象是看不见的,它们不出现在你的源代码中.建立一个没有命名的非堆(non-heap)对象会产生临时 ...

最新文章

  1. 把鼠标、触摸屏、触控笔统一起来,Pointer Events介绍
  2. linux java进程消失_Linux系统下的Java进程无故消失怎么办?
  3. Apache SkyWalking 为.NET Core带来开箱即用的分布式追踪和应用性能监控
  4. HTML5 音频视频
  5. 研发管理---(1)持续交付
  6. 一般试卷的纸张大小是多少_国际A4纸尺寸大小是多少?标准A4纸像素分辨率换算方法...
  7. 每周工作量及时间统计
  8. marqueeview更改字体颜色_安卓手机上可以编辑字体的便签软件哪个好?
  9. 易语言静态连接器提取_正确易语言链接器link.exe,使易语言支持静态编译
  10. Android 中获取符合分辨率的视频
  11. 易语言鼠标移动到桌面计算机图标上,易语言桌面图标提示源码
  12. [安洵杯 2019]easy_web
  13. c语言三阶素数魔方阵,C语言 三阶魔方阵
  14. 浅谈JdbcDaoSupport
  15. Shiro RememberMe 1.2.4 反序列化命令执行漏洞复现 kali docker
  16. NFT: 开启加密艺术时代的无限可能
  17. 怎么用Q-Q图验证数据集的分布
  18. 用友NC65 配置UAP时 打开sysconfig闪退
  19. 时间序列模型 (二):移动平均法
  20. python安装h5py

热门文章

  1. MVP:界面与业务逻辑分离在Winform中的应用
  2. Windows Server中企业证书服务的安装
  3. [Python爬虫] 在Windows下安装PIP+Phantomjs+Selenium
  4. Git之深入解析如何将项目迁移到Git
  5. HarmonyOS之深入解析媒体会话的管理
  6. 2013\Province_Java_C\2.组素数
  7. Python+Hive环境搭建
  8. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1082:求小数的某一位
  9. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1045:收集瓶盖赢大奖
  10. 【机器视觉】 Halcon代码导出高级语言代码