C++ 类对象 add

struct Sales_data {
    string bookNo;                // ISBN number
    unsigned sold = 0;            // total sold
    double revenue = 0.0;        // total revenue

    string isbn() const { return bookNo; }    // inline member function
    Sales_data& combine(const Sales_data&);    // +=
    double avg_price() const;
};
istream &read(istream&, const Sales_data&);
ostream &print(ostream&, const Sales_data&);
Sales_data add(const Sales_data&, const Sales_data&);

ostream& print(ostream& os, Sales_data& item)
{
    os << "ISBN: " << item.isbn() << " Sold: " << item.sold << " Revenue: " << item.revenue
       << " Average Price: " << item.avg_price() << "\n";
    return os;
}

Sales_data add(const Sales_data& lhs, const Sales_data& rhs)
{
    Sales_data sum = lhs;
    sum.combine(rhs);
    return sum;
}
int main()
{
    Sales_data book1, book2, temp1;
    read(cin, book1);
    read(cin, book2);
    print(cout, add(book1, book2));    // 报错
    temp1 = add(book1, book2);
    print(cout, temp1);                // 成功
}

错误提示是:

无法解析的外部符号 "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl print(class std::basic_ostream<char,struct std::char_traits<char> > &,struct Sales_data const &)" (?print@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV12@ABUSales_data@@@Z)

完全不知道错在哪。。。

阅读 3.7k
2 个回答

combineavg_price只声明了,没有定义.
ostream& print(ostream& os, Sales_data& item)定义为ostream& print(ostream& os, const Sales_data& item), 少了个const.

漏抄了combine和avg_price的定义了吧了吧...不过你的编译错误提示信息也有点太那个啥了...可以的话用clang或者msvc吧. 都对你的这段代码有着清晰的错误提示

/tmp/prog-961bd8.o: In function `print(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, Sales_data&)':
prog.cc:(.text+0xd2): undefined reference to `Sales_data::avg_price() const'
/tmp/prog-961bd8.o: In function `add(Sales_data const&, Sales_data const&)':
prog.cc:(.text+0x181): undefined reference to `Sales_data::combine(Sales_data const&)'
/tmp/prog-961bd8.o: In function `main':
prog.cc:(.text+0x159f): undefined reference to `read(std::__1::basic_istream<char, std::__1::char_traits<char> >&, Sales_data const&)'
prog.cc:(.text+0x15bb): undefined reference to `read(std::__1::basic_istream<char, std::__1::char_traits<char> >&, Sales_data const&)'
prog.cc:(.text+0x15f3): undefined reference to `print(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, Sales_data const&)'
clang-6.0: error: linker command failed with exit code 1 (use -v to see invocation)

以后提这种问题也用markdown把编译错的信息好好贴...别这么混乱.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题