我要打印两个类对象之和的结果,合理 数字,例如cout << a + b,其中a和b是此类的对象, 分子和分母。我重载了+运算符和<< 运算符,如果单独使用它们,它们可以完美地工作,例如c = a + b; out << c;但是当我同时使用它们时,例如cout << a + b,它会给出 E0349“没有运算符“ <<”与这些操作数匹配。我需要对其进行哪些修改才能使其起作用?
我尝试重载+和<<作为成员和非成员函数, 而且没有用。
这是声明我的<<重载后.cpp中的重载 在类中作为朋友功能:
ostream& operator<<(ostream& out, Rational& r)
{
out << r.getA() << "/" << r.getB();
return out;
}
这是+重载,用于将类头中的两个有理数相加:
Rational friend operator+(Rational& r1, Rational& r2)
{
Rational r3;
float numarator, numitor , numitor1, numitor2;
if (r1.getB() != r2.getB())
{
numitor1 = r1.getB();
numitor2 = r2.getB();
while (numitor1 != numitor2)
{
numitor1 < numitor2 ? numitor2 = numitor2 - numitor1 :
numitor1 = numitor1 - numitor2;
}
if (numitor1 == 1)
{
r3.setA(r1.getA() * r2.getB() + r2.getA() * r1.getB());
r3.setB(r1.getB() * r2.getB());
}
else
if (numitor1 < numitor2)
{
r3.setA(r1.getA() * (r2.getB() / r1.getA()) + r2.getA());
r3.setB(r2.getB());
}
else
{
r3.setA(r1.getA() + r2.getA() * (r1.getB() / r2.getB()));
r3.setB(r1.getB());
}
}
numarator = r3.getA();
numitor = r3.getB();
while (numarator != numitor)
{
numarator < numitor ? numitor = numitor - numarator : numarator =
numarator - numitor;
}
r3.setA(r3.getA() / numarator);
r3.setB(r3.getB() / numitor);
return r3;
}
错误消息为E0349没有运算符“ <<”与这些操作数匹配 和 C2679二进制'<<':找不到使用右手操作数的运算符 输入“理性”(或没有可接受的转换)