×××××sales_data通过类型转换形成的临时对象不能转换成sales_data (非常量引用)
生活随笔
收集整理的這篇文章主要介紹了
×××××sales_data通过类型转换形成的临时对象不能转换成sales_data (非常量引用)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文件? ?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 &
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的×××××sales_data通过类型转换形成的临时对象不能转换成sales_data (非常量引用)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux cp 命令使用一角
- 下一篇: 网关和路由器的区别是什么?