2016-12-16 74 views
1

我正在研究一個問題,它要求創建一個類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); 
}; 

這是我的函數:

error: invalid operands of types 'double' and 'double' to binary 'operator%'| 

我:

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; 
} 

最後一行在編譯過程中生成以下錯誤新的CPP和這個我的功課...請幫助...

+1

你真的不需要所有的代碼來證明你遇到的問題。 [見此](http://ideone.com/YdNM6q)。 – PaulMcKenzie

+0

@PaulMcKenzie:上下文很重要。您嘗試的最小示範未能包含最重要的方面。 –

+0

請說明該作業是否需要您使用'double',或者這是您的決定。通常「有理數」是指分子和分母都是整數。 –

回答

5
(r3.n)%(r3.d) 

nd的類型爲double。運算符%(模)僅適用於整數。

As @Cheers and hth。 - Alf在評論中指出,最好的解決方案是將nd聲明爲整數,因爲它代表一個有理數將更加連貫。

如果你不能做到這一點,真的有一個理由使用雙打,你將不得不使用std::fmod代替:

std::fmod(r3.n, r3.d) 
+0

謝謝....但我如何解決這個....任何想法? – fleshbender

+0

@fleshbender看到我的編輯;) – wasthishelpful

+0

謝謝它的工作! – fleshbender

0

由於%僅供整數,因此,你將不得不使用fmod(x,y)。您還需要添加#include <math.h>作爲標題。

+0

'math.h'是一個C頭文件;) – wasthishelpful

+0

對,我看到它已經有了一個答案 – Munahil

+0

** - 1 **「你將不得不使用'fmod(x,y)'」是負值建議。 –

2

在C++ %只適用於整數。

使用整數類型nd

這也有助於確保是數學整數,您不能用浮點類型保證它。