// Sales_item.hpp
#ifndef SALEITEM_H
#define SALEITEM_H
#include <iostream>
#include <string>
class Sales_item {
public :
std::istream& input(std::istream& in);
std::ostream& output(std::ostream& out) const;
double avg_price() const;
Sales_item add(Sales_item& other);
bool same_isbn(const Sales_item &rhs) const
{
return isbn == rhs.isbn;
}
Sales_item::Sales_item() : units_sold(0), revenue(0.0) {}
private:
std::string isbn;
unsigned units_sold;
double revenue;
};
#endif
// Sales_item.cpp
#include "Sales_item.hpp"
std::istream& Sales_item::input(std::istream& in)
{
double price;
in >> isbn >> units_sold >> price;
if (in)
revenue = units_sold * price;
else {
units_sold = 0;
revenue = 0.0;
}
return in;
}
std::ostream& Sales_item::output(std::ostream& out) const
{
out << isbn << "\t" << units_sold << "\t"
<< revenue << "\t" << avg_price();
return out;
}
double Sales_item::avg_price() const
{
if (units_sold)
return revenue / units_sold;
else
return 0;
}
Sales_item Sales_item::add(Sales_item& other)
{
revenue += other.revenue;
units_sold += other.units_sold;
return *this;
}
// 1.cpp
#include <iostream>
#include "Sales_item.hpp"
using namespace::std;
int main()
{
Sales_item item;
cout << "Enter some transations(Ctrl + Z to end):"
<< endl;
while (item.input(cin)) {
cout << "The transations readed is :" << endl;
item.output(cout);
cout << endl;
}
return 0;
}
在主程序中,书中#include "Sales_item.hpp",编译成功,但连接错误,vc6.0提示:
1.obj : error LNK2001: unresolved external symbol "public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall Sales_item::output(class std::basic_ostream<char,struct std::char_traits<char> > &)const " (?output@Sales_item@@QBE
AAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV23@@Z)
1.obj : error LNK2001: unresolved external symbol "public: class std::basic_istream<char,struct std::char_traits<char> > & __thiscall Sales_item::input(class std::basic_istream<char,struct std::char_traits<char> > &)" (?input@Sales_item@@QAEAAV?$bas
ic_istream@DU?$char_traits@D@std@@@std@@AAV23@@Z)
Debug/1.exe : fatal error LNK1120: 2 unresolved externals
改成了Sales_item.cpp就能成功运行。
在主程序中使用Sales_item类,到底应该包含哪个文件,Sales_item.hpp还是Sales_item.cpp??