请教一个C++的重载程序,哪里出错了

来源:百度知道 编辑:UC知道 时间:2024/09/25 13:21:24
题目是一个对一个有理数类进行重载的问题
我只在做第一个时重载时就发现过不去了,请高手帮我看看程序哪里有错
#include <iostream>
using namespace std;

class zrf_Ratio
{
public:
zrf_Ratio(int s1=1,int m1=1):s(s1),m(m1){}
friend ostream& operator<<(ostream&, const zrf_Ratio&);
private:
int s;
int m;
};

ostream& operator<<(ostream& out, const zrf_Ratio& z)
{ out<<z.s<<"/"<<z.m;
return out;
}

int main()
{ zrf_Ratio zrf(1,7);
cout<<"zrf is:"<<zrf;
return 0;
}
我希望输出: "zrf is:"1/7
这里我简化了好多东西,可还是有错
一类是 's' : cannot access private member declared in class 'zrf_Ratio' 可我已经设为友元函数了呀?
另一个是'operator <<' is ambiguous 我不知道怎么了?我比较菜,希望由高手能讲解清楚些。谢谢。

应该是搂住的编译器问题吧,在VC2005可以运行,而且看你的程序也没错阿...

ostream& zrf_Ratio::operator<<(ostream& out, const zrf_Ratio& z) 这样试试看

友元函数不能访问私有成员数据,可以间接通过类中的非私有成员函数来访问