如何为架构x86_64错误修复g ++未定义符号?我使用IDE clion

时间:2017-02-18 02:46:13

标签: 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)){       //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;
    }
}

Fun.cpp

#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

#ifndef PROJECT1_FUN_H
#define PROJECT1_FUN_H
#include <cstdio>
#include <cstring>
#include <cassert>
#include <vector>
#include <iostream>
using std::istream;
using std::ostream;
using std :: cin;
using std :: cout;
using std :: cerr;
using std :: endl;
struct Sales_data{
    std::string isbn()const{return bookNo;}
    Sales_data& combine(const Sales_data&);
    double avg_price() const;
    std::string bookNo;
    unsigned units_sold = 0;
    double revenue = 0;
};

Sales_data add(const Sales_data&,const Sales_data&);
istream &read(istream &,Sales_data &);
ostream &print(ostream &,Sales_data &);
#endif //PROJECT1_FUN_H

这是错误信息:

error screenshot

我想知道导致这个问题的原因是什么?

1 个答案:

答案 0 :(得分:0)

我认为问题在于print函数的声明和定义是不同的(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 &);