when I use clion to run a example code on C++Primer,I meet this problem: ld: symbol(s) not found for architecture arm64.I am using m1 mac,and the platform I run the code is clion.I guess the problem is because the istream ,but I don't know how to slove it.enter image description here
the problem is happened in this code:
Sales_data.cpp:
istream &read(istream &is, Sales_data &data){
double price = 0;
is>>data.bookNo>>data.units_sold>>data.revenue;
data.revenue = price * data.units_sold;
return is;
}
And the whole code as follow: main:
#include "Sales_data.h"
int main(int argc, char **argv) {
Sales_data total;
cout<<"请依次输入书的isbn号、本数和单价"<<endl;
//if (cin>>total.bookNo>>total.units_sold>>total.revenue) {
if (read(cin, total)) {
Sales_data trans;
while (trans.isbn() != "q") {
cin>>trans.bookNo>>trans.units_sold>>trans.revenue;
if (total.isbn() == trans.isbn()) {
total.combine(trans);
} else {
print(cout, total);
total = trans;
}
}
print(cout, total);
} else {
cerr << "No data?" << endl;
exit(-1);
}
Sales_data.h:
//
// Created by 邓映隆 on 2021/8/11.
//
#ifndef C__PRIMER_SALES_DATA_H
#define C__PRIMER_SALES_DATA_H
#include <iostream>
using namespace std;
class Sales_data{
public:
Sales_data() = default;
Sales_data(const string &str);
Sales_data(const string &str, unsigned n, double p);
Sales_data(istream &);
string isbn() const;
Sales_data& combine(const Sales_data&);
double avg_price() const;
string bookNo;
unsigned units_sold = 0;
double revenue = 0;
};
ostream &print(ostream&, const Sales_data&);
istream &read(istream&, const Sales_data&);
Sales_data add(const Sales_data&, const Sales_data&);
#endif //C__PRIMER_SALES_DATA_H
Sales_data.cpp:
#include "Sales_data.h"
Sales_data::Sales_data(const string &str) : bookNo(str){}
Sales_data::Sales_data(const string &str, unsigned n, double p) : bookNo(str), units_sold(n), revenue(n * p){}
/*Sales_data::Sales_data(istream &is){
read(is, *this);
}*/
string Sales_data::isbn() const {
return bookNo;
}
double Sales_data::avg_price() const {
if (units_sold) {
return revenue / units_sold;
} else return 0;
}
Sales_data &Sales_data::combine(const Sales_data &data) {
units_sold += data.units_sold;
revenue += data.revenue;
return *this;
}
istream &read(istream &is, Sales_data &data){
double price = 0;
is>>data.bookNo>>data.units_sold>>data.revenue;
data.revenue = price * data.units_sold;
return is;
}
ostream &print(ostream &os, const Sales_data &data){
os<<data.isbn()<<" "<<data.units_sold<<" "<<data.revenue<<" "<<data.avg_price();
return os;
}
Sales_data add(const Sales_data &data1, const Sales_data &data2){
Sales_data sum = data1;
sum.combine(data2);
return sum;
}