我正在研究一个问题,要求创建一个类Rational
,其变量为分子和分母,以及一个添加两个有理数的函数。
这是我创建的课程:
class Rational
{
public:
// n stands for numerator and d stands for denominator
double n,d;
// add stands for addition
void add(Rational r1, Rational r2);
};
这是我的职责:
void Rational::add(Rational r1, Rational r2)
{
// ar stands for rational number after addition
double ar;
// new object which takes the value after addition
Rational r3;
// formula for numerator after addition
r3.n=(r1.n*r2.d)+(r2.n*r1.d);
// formula for denominator after addition
r3.d=(r1.d*r2.d);
// ratio equals divisor plus quotient multiplied to remainder
ar=(r3.n/r3.d)+((r3.n)%(r3.d))*r3.d;
}
最后一行在编译期间生成以下错误:
error: invalid operands of types 'double' and 'double' to binary 'operator%'|
我是cpp的新手,这是我的作业......请帮忙...
答案 0 :(得分:5)
(r3.n)%(r3.d)
n
和d
属于double
类型。运算符%
(modulo)仅适用于整数。
作为@Cheers和hth。 - Alf在评论中指出,最好的解决方案是将n
和d
声明为整数,因为它将更加连贯地表示一个有理数。
如果你不能这样做并且真的有理由使用双打,你将不得不使用std::fmod
代替:
std::fmod(r3.n, r3.d)
答案 1 :(得分:2)
在C ++中%
仅适用于整数。
对n
和d
使用整数类型。
这也有助于确保值是数学整数,使用浮点类型无法保证。
答案 2 :(得分:0)
由于%
仅适用于整数,因此您必须使用fmod(x,y)
。您还必须添加#include <math.h>
作为标题。