帮忙看看是什么原因啊,谢谢!
[code=C/C++][/code]
//Sales_item.h
#include <string>
using namespace std;
class Sales_item
{
friend bool operator==(const Sales_item &,const Sales_item &);
public:
Sales_item(const string book):
isbn(book),units_sold(0),revenue(0.0){}
Sales_item(istream& is)
{
is>>*this;
}
friend istream& operator>>(istream&,Sales_item&);
friend ostream& operator<<(ostream&,const Sales_item&);
public:
Sales_item& operator+=(const Sales_item&);
public:
double avg_price()const;
bool same_isbn(const Sales_item& rhs)const;
Sales_item():units_sold(0),revenue(0.0){}
private:
string isbn;
unsigned units_sold;
double revenue;
};
//Sales_item.cpp
#include "Sales_item.h"
inline bool operator==(const Sales_item& a,const Sales_item& b)
{
if(a.isbn == b.isbn && a.units_sold == b.units_sold && a.revenue == b.revenue)
return true;
else
return false;
}
inline istream& operator>>(istream& a,Sales_item& b)
{
double price;
a>>b.isbn>>b.units_sold>>price;
if(a)
b.revenue = price*b.units_sold;
else
b = Sales_item();
return a;
}
inline ostream& operator<<(ostream& out, const Sales_item& s)
{
out << s.isbn << "\t" << s.units_sold << "\t"
<< s.revenue << "\t" << s.avg_price();
return out;
}
inline Sales_item& Sales_item::operator +=(const Sales_item& a)
{
units_sold += a.units_sold;
revenue += a.revenue;
return *this;
}
inline double Sales_item::avg_price() const
{
double avpprice;
avpprice = revenue/units_sold;
return avpprice;
}
inline bool Sales_item::same_isbn(const Sales_item &rhs) const
{
if(isbn == rhs.isbn)
return true;
else
return false;
}
#include <iostream>
using namespace std;
#include "Sales_item.h"
int main()
{
Sales_item book("hello");
cout<<book;
return 0;
}
报错:
1>bookshop.obj : error LNK2019: 无法解析的外部符号 "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class Sales_item const &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@ABVSales_item@@@Z),该符号在函数 _main 中被引用
1>D:\学习\C++\bookshop\Debug\bookshop.exe : fatal error LNK1120: 1 个无法解析的外部命令
[解决办法]
把所有inline函数的定义放置到Sales_item.h中,不要Sale_item.cpp,或者去掉所有的inline声明。
[解决办法]
默认情况下inline函数具有内部链接性,所以在其他文件不可见,所以会报错。
解决办法:
1。去掉inline
2.所有代码和main函数在一起