0

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;
}
kaylum
  • 13,155
  • 2
  • 21
  • 31
Deng
  • 9
  • 1

0 Answers0