友元和重载的问题

jhldelphi 2011-06-04 02:51:05
#include "stdafx.h"
//#include "..\..\comm\Sales_item.h"

#include <iostream>
#include <string>
using namespace std;

class Sales_item
{
friend istream& operator>>(istream &in, Sales_item &s);
public:
Sales_item(): units_sold(0), revenue(0.0) {}
Sales_item(const string &book):isbn(book), units_sold(0), revenue(0.0){}

public:
Sales_item& operator+=(const Sales_item &);

public:
double avg_price() const;
inline bool same_isbn(const Sales_item &rhs) const { return isbn == rhs.isbn;}

private:
string isbn;
unsigned units_sold;
double revenue;
};

istream& operator>>(istream &in, Sales_item &s)
{
double price;
in >> s.isbn >> s.units_sold >> price;
if(in)
{
s.revenue = s.units_sold * price;
}
else
{
s = Sales_item();
}

return in;
}

inline Sales_item& Sales_item::operator+=(const Sales_item &rhs)
{
units_sold += rhs.units_sold;
revenue += rhs.revenue;
return *this;
}

inline double Sales_item::avg_price() const
{
if(units_sold)
{
return revenue / units_sold;
}
else
{
return 0;
}
}

int main(int argc, char* argv[])
{

Sales_item book;

/*
cout << "Enter transactions: " << endl;
while(cin >> book)
{
cout << "ISBN, number of copies sold, "
<< "total revenue, and average price are: "
<< endl;
cout << book << endl;
}
*/
return 0;
}


error C2248: 'isbn' : cannot access private member declared in class 'Sales_item'
error C2248: 'units_sold' : cannot access private member declared in class 'Sales_item'
error C2248: 'revenue' : cannot access private member declared in class 'Sales_item'
...全文
147 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
gergerman 2011-06-04
  • 打赏
  • 举报
回复
的确啊,vc6对c++兼容不全面
换个vc2008吧~用着感觉不错,加多个visual X插件就更好
飞天御剑流 2011-06-04
  • 打赏
  • 举报
回复
这是VC6的问题,那个>>友元重载的定义要放到类体中。

VC6有太多不符合标准的地方,远离VC6!
jhldelphi 2011-06-04
  • 打赏
  • 举报
回复
再等等
Louistao 2011-06-04
  • 打赏
  • 举报
回复
elipse+ MinGw下也没问题
jhldelphi 2011-06-04
  • 打赏
  • 举报
回复
我在VC6下面,编译通不过。报上面的错误。
jhldelphi 2011-06-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bdmh 的回复:]
未注释的代码可以正常编译,注释代码中
cout << book << endl;这里没有对book的类,实现<<的重载
[/Quote]

输出的我删掉了,没加上去
bdmh 2011-06-04
  • 打赏
  • 举报
回复
未注释的代码可以正常编译,注释代码中
cout << book << endl;这里没有对book的类,实现<<的重载
KID_coder 2011-06-04
  • 打赏
  • 举报
回复
cout << book << endl;
没有重载<<
KID_coder 2011-06-04
  • 打赏
  • 举报
回复
vs2010可以通过~
就想叫yoko 2011-06-04
  • 打赏
  • 举报
回复
我VC05没问题呀

64,663

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧