首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

帮忙看看是什么原因啊多谢

2012-04-19 
帮忙看看是什么原因啊,谢谢![codeC/C++][/code]//Sales_item.h#include stringusing namespace stdcla

帮忙看看是什么原因啊,谢谢!
[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函数在一起

热点排行