2017-11-29 7 views
0

C++クラスの初心者向けのプログラムを作成していますが、 。私はDividedByと呼ばれるメンバ関数を持つfractionというクラスを持っています。次のようにDividedByが初期化して定義されていますエラー: 'xxx'を 'xxx'の引数として 'xxx'を渡すと、修飾子が破棄されます。[-fpermissive]

fraction fraction::DividedBy(fraction operand)  

fraction fraction::DividedBy(fraction operand){ 
int quotNum = num * operand.num; 
int quotDenom = denom * operand.denom; 

simplify(quotNum, quotDenom); 

fraction quot = fraction(quotNum, quotDenom); 
return quot;} 

私はこのような機能のDividedByを呼んでいる:

result = f3.DividedBy(f4); 

結果、F3、F4とは、すべての端数オブジェクトです。私は、このエラーメッセージが出てい:の「この」引数「分数分画:: DividedBy(分数)」は修飾子[-fpermissive]

を捨てるよう

が、これは何を意味する「constの割合」を渡しますか?私はこのメッセージを見てきましたが、いつも一定の議論に合格しようとしている人が関わっているようです。私はここでやっていないと確信しています。何とか私が捨てる予選は何ですか?

+3

したがって、 'f3'はどのように宣言されていますか? – hvd

+1

[mcve]を作ってください –

+1

私は野生の刺し傷をとって、 'DividedBy'は' const'でなければ 'const fraction'で呼ぶことはできません。 – 0x5453

答えて

2

f3をタイプconst fractionと宣言したことは、f3を変更できないことを意味します。メソッドDividedByはそれを変更しませんが、コンパイラはメソッドが何とかそれを変更できると仮定してそれについての保証はありません。ここ

ソリューションは、どちらかであるF3定数を持っているか、より良いできる一定の何かを作る方がよい経験則では

fraction fraction::DividedBy(fraction operand) const 

fraction fraction::DividedBy(fraction operand) const { 
... 
} 

に宣言と定義を変更することによって、方法DividedBy定数をしないように定数。たとえば、タイプがconst fraction &のオペランドを作成すると、クラスを不必要にコピーしないようにすることができますが、一定の分数を渡すときにコードがコンパイルされるのを防ぐことはできません。

最後の部分[-fpermissive]は、この警告を抑制し、コンパイルする方法を指示するコンパイラです(このフラグをコンパイラに渡すだけです)。このオプションがあることを知ってうれしいですが、あなたが何をしているのか、なぜそれが正しい方法で行えないのかを本当に確かめるまで、それを使用してはいけません。

1

f3がconst参照である場合、DevidedByはconstとして宣言する必要があります。

関連する問題