所以我正在研究一个分数类程序,我在重载输出运算符时遇到了一些困难。 主文件的相关位。
const fraction fr[] = {fraction(4, 8), fraction(-15,21),
fraction(10), fraction(12, -3),
fraction(), fraction(28, 6), fraction(0, 12)};
for (int i = 0; i < 7; i++){
cout << "fraction [" << i <<"] = " << fr[i] << endl;
}
并在fraction.h中
std::ostream& operator<<(std::ostream &out, const fraction &fr); //the location of the error.
并在类fraction.cpp文件中
ostream& operator<<(ostream& stream, const fraction& fr)
{
if(fr.Denominator==1||fr.Numerator==0)
stream << fr.Numerator;
else
stream << fr.Numerator << '/' << fr.Denominator << endl;
return stream;
}
无论如何,错误代码很简单。 “的std :: ostream的和放; fraction :: operator&lt;&lt;(std :: ostream&amp;,const fraction&amp;)'必须只取一个参数|
我有点迷失为什么这就是它告诉我的。 [它是不是能够接受带有2个值的函数?,(std :: ostream&amp;,const fraction&amp;)只是简单的错误?它应该只是括号中的一个参数吗?]
主要功能是一成不变的,如果我的班级的cpp和头文件编码正确,则可以正常工作。
我只在朋友的功能中做过IO重载,从来没有在内部,甚至那些我没有经验的人,所以我在这一点上很丢失。
答案 0 :(得分:1)
编译器告诉您正在尝试为两个参数重载operator <<
,但在类运算符成员函数内部仅使用一个参数(即右侧参数) 。如果代码是friend
fraction
,那么你的代码就可以工作,因为你将定义一个带有两个参数的自由运算符函数。
所以要修复,要么在fraction
之外定义函数,要么将其命名为类的friend
。当您将其命名为friend
时,该函数将能够访问该类的任何实例的私有成员。