2011-07-20 18 views
2

私は整数にキャストする必要があるC++/CLIのプロパティを持っていますが、コンパイラは警告を表示します(c4244)。Visual C++/CLIでの警告のキャスト

//"Value" is a double 
int newValue = (int)(control->Value); //C4244 

私はint型が保持できるよりも、二重が大きくなる可能性があるため、コンパイラは幸せではないことを理解しますが、この特定の制御は1から10までの値であることが保証されているので、I:たとえば、は大丈夫だろうと知っています。どういうわけか、この警告を取り除くことはできますか?

+1

キャストが警告を抑制しない場所はどこにもないと思います。/Wallでさえ。いくつかの重要な情報が欠落しています。 –

+0

静的関数を呼び出すとき、実際のキャストは引数リスト内にあります。多分これは物事を変えるでしょうか? – Nate

答えて

2

コンパイラは、範囲外になるだけでなく、情報を失う可能性があることを警告しています(何らかの理由で数字を切り上げる必要があり、それを自分自身で行うことを恐れています)。

int newValue = floor(control->Value); 

それとも、起こって暗黙の何もないことをコンパイラに伝えるために、明示的にだけで唱えられる、とあなたは何をやっている知っている:

使用floor()は、あなたが何をやっている知っていることを伝えるために:

int newValue = (int)(float)(control->Value); 
+0

@Nathan:明示的キャストの例で私の答えを更新しました。 –

+1

@ Yochai-Timmerが上記のことに加えて:「コンパイラ警告(レベル3と4)C4244」のMSDN記事をお読みください(http://msdn.microsoft.com/en-us/library/th7a07tz.aspx ) – yasouser

関連する問題