所以我正在研究分数类程序,但我在重载输出运算符时遇到了一些困难。 主文件的相关位。
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<<(std::ostream&, const fraction&)’必须恰好接受一个参数|
我有点迷惑为什么它告诉我的是这个。 [它不能接受取 2 个值的函数吗?是 (std::ostream&, const fraction&) 完全错误吗?它应该只是括号中的单个参数吗?]
如果我的类(class)的 cpp 和头文件在作业中正确编码,则 main 函数是固定的并且可以工作。
我只在友元函数中做过 IO 重载,从来没有在友元函数中做过,即使是那些我也没有经验的函数,所以在这一点上我很迷茫。
最佳答案
编译器告诉您您正在尝试重载 operator <<
对于两个参数,但在类运算符成员函数内部仅采用一个参数(即右侧参数)。如果它是 friend
,您的代码将有效的 fraction
因为您将定义一个带有两个参数的自由运算符函数。
所以要修复,要么在 fraction
之外定义函数或将其命名为 friend
类的。当您将其命名为 friend
, 该函数将能够访问类的任何实例的私有(private)成员。
关于c++ - 在类和类的标题中重载 << 运算符时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21370635/