Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何修复g++;架构x86_64的未定义符号错误?我使用ideclion_C++_Macos_Clion - Fatal编程技术网

C++ 如何修复g++;架构x86_64的未定义符号错误?我使用ideclion

C++ 如何修复g++;架构x86_64的未定义符号错误?我使用ideclion,c++,macos,clion,C++,Macos,Clion,我只有一个带有.h和.cpp文件的自定义类,但在尝试从main.cpp(使用IDE clion)创建此类实例时出错 我只是初学阅读C++入门课的学生,如果有一些不合适的东西,请指出。 main.cpp #include "Fun.h" void Solve(); int main() { Solve(); return 0; } void Solve() { Sales_data total; if(read(cin,total)){ //rea

我只有一个带有.h和.cpp文件的自定义类,但在尝试从main.cpp(使用IDE clion)创建此类实例时出错

我只是初学阅读C++入门课的学生,如果有一些不合适的东西,请指出。 main.cpp

#include "Fun.h"

void Solve();

int main()
{
    Solve();
    return 0;
}

void Solve()
{
    Sales_data total;
    if(read(cin,total)){       //read the first record
        Sales_data temp;
        while(read(cin,temp)){
            if(temp.isbn() == total.isbn())
               total.combine(temp);
            else{
                print(cout,total) << endl;
                total = temp;
            }
        }
        print(cout,total);
    }//if
    else{
        cerr << "No data!?" << endl;
    }
}
#include "Fun.h"
using std::istream;
using std::ostream;

double Sales_data ::avg_price() const {
    if(units_sold)
        return revenue/units_sold;
    else
        return 0;
}

Sales_data& Sales_data:: combine(const Sales_data& rhs){
    units_sold += rhs.units_sold;
    revenue += rhs.revenue;
    return *this;                           
}

istream &read(istream &is,Sales_data &item)
{
    double price = 0;
    is >> item.bookNo >> item.units_sold >> price;
    item.revenue = price * item.units_sold;
    return is;
}

ostream &print(ostream &os, const Sales_data &item)
{
    os << item.isbn() << " " << item.units_sold << " "
       << item.revenue << " " << item.avg_price() ;
    return os;
}

Sales_data add(const Sales_data& lhs,const Sales_data& rhs)
{
    Sales_data sum = lhs;
    sum.combine(rhs);
    return sum;
}
#包括“Fun.h”
void Solve();
int main()
{
Solve();
返回0;
}
void Solve()
{
销售数据合计;
if(read(cin,total)){//读取第一条记录
销售数据温度;
while(读取(cin、temp)){
如果(临时isbn()=总计isbn())
联合收割机(温度);
否则{
打印(cout,total)>item.units\u已售>>价格;
item.revenue=价格*item.units\u售出;
回报是;
}
ostream&print(ostream&os、const Sales_数据和项目)
{

os我认为问题在于
print
函数的声明和定义不同(
Sales\u data
参数在声明中是一个引用,而在定义中是一个常量引用):

将头文件中的声明更改为:

ostream &print(ostream &, const Sales_data &);
ostream &print(ostream &,Sales_data &); // Fun.h
ostream &print(ostream &os, const Sales_data &item) // Fun.cpp
ostream &print(ostream &, const Sales_data &);