2016-12-16 5 views
1

私は、分子と分母として変数を持つクラスRationalを作成する質問と、2つの有理数を追加する関数を作成する質問に取り組んでいます。%演算子を使用している間に二重にエラーが発生しました

これは私が作成したクラスです。

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に新しいと私の宿題...助けてください...

+1

あなたが持っている問題を実証するために、本当にそのコードのすべてが必要なわけではありません。 [これを見る](http://ideone.com/YdNM6q) – PaulMcKenzie

+0

@PaulMcKenzie:状況が重要です。試行された最小限のデモンストレーションには、最も重要な側面が含まれていません。 –

+0

割り当てに「ダブル」を使用する必要があるのか​​、それともあなたの決定だったのかを明確にしてください。通常、「有理数」は、分子と分母が整数であることを意味します。 –

答えて

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

nおよびdは、タイプdoubleです。演算子%(モジュロ)は整数にのみ使用できます。

@Cheersと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に整数型を使用します。

の値は、浮動小数点型では保証されない数学的な整数です。

関連する問題