【问题标题】:How can I fix g++ Undefined symbols for architecture x86_64 error? I use IDE clion如何修复架构 x86_64 错误的 g++ 未定义符号?我使用 IDE clion
【发布时间】:2017-07-07 17:19:59
【问题描述】:

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

本人只是初学者,正在阅读C++入门学习班,如有不妥之处请指出。

ma​​in.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

这是错误信息:

不知道是什么原因造成的?

【问题讨论】:

    标签: c++ macos clion


    【解决方案1】:

    我认为问题在于 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 &);
    

    【讨论】:

      猜你喜欢
      • 2014-06-23
      • 2021-10-03
      • 2020-12-10
      • 2019-12-05
      • 2017-02-15
      • 1970-01-01
      • 1970-01-01
      • 2017-12-03
      • 1970-01-01
      相关资源
      最近更新 更多