0

Mac からこの Windows PC にプログラムを移動したとき、VC++ 2008 コンパイラは unsigned ints を cmath pow() 関数に渡すとエラーを出します。私が理解しているように、この関数は浮動小数点数以外を受け入れるようにオーバーロードされていません。

これらのエラーを無視するコンパイラ フラグ/設定はありますか? また、VC++ コンパイラに関するドキュメントを見つける方法を知っている人はいますか?

編集

これは警告ではなく、エラーです。ただし、私のプログラムは整数として出力される数値のみを扱っているため、私にとっては問題ではありません。したがって、浮動小数点数でなくてもかまいません。それが単なる警告だった場合、私は自分の人生を続けますが、それは私をコンパイルさせません. どうにかしてエラーを抑えることはできますか? 私が言ったように、私の Mac ではエラーは発生せず、プログラムは問題ありません。

4

6 に答える 6

3

ここでの他の回答に関しては、質問の作成者にこの警告をオフにするように指示することはお勧めできません。彼のコードは壊れています - 彼は float の代わりに unsigned int を渡しています。あなたは彼に彼のコードを修正するように言っているはずです!

これは警告ではなく、エラーです。ただし、私のプログラムは整数として出力される数値のみを扱っているため、私にとっては問題ではありません。したがって、浮動小数点数でなくてもかまいません。それが単なる警告だった場合、私は自分の人生を続けますが、それは私をコンパイルさせません. どうにかしてエラーを抑えることはできますか? 私が言ったように、私の Mac ではエラーは発生せず、プログラムは問題ありません。

整数と浮動小数点数は、内部で異なる表現を使用します。int と float に同じ数値がある場合、それらのストレージ内のビット パターンは完全に異なります。浮動小数点数を渡す必要があるときに整数を渡すと、どのような状況でもコードが機能することを期待できません。

さらに、あなたの Mac コードは、その関数のオーバーロードされたバージョンを暗黙のうちに使用している (たとえば、C++ でコンパイルしているそのプラットフォームで使用している) か、実際には偶然に機能している、または実際には機能していないのに、機能すると信じていると断言します。

補遺

これまでに作成されたコンパイラには、エラーをオフにする機能がありません。

警告は、コンパイラがあなたが間違いを犯していると考えていることを意味します。

エラーは、コンパイラが何をすべきかわからないことを意味します。

于 2009-04-16T21:23:57.480 に答える
1

いくつかのオプションがあります。

C では、解決策は単純に int を double にキャストすることです。

pow((double)i, (double)j)

C++ でも同じことができますが、C++ スタイルのキャストを使用する必要があります。

pow(static_cast<double>(i), static_cast<double>(j))

しかし、C++ が提供するオーバーロードを使用することをお勧めします。

std::pow(static_cast<double>(i), j);

基数は依然として浮動小数点値でなければなりませんが、指数は少なくとも int にすることができます

std:: プレフィックスはおそらく必要ありません (ほとんどのコンパイラは、関数をグローバル名前空間でも使用できるようにします)。

もちろん、C++ バージョンの関数にアクセスするには、C++ バージョンのヘッダーを含める必要があります。

#include <math.h>だからあなたの代わりに#include <cmath>

C++ は、この命名規則を使用して、すべての C ヘッダーの C++ バージョンを提供します。C ヘッダーが呼び出された場合foo.h、C++ バージョンは になりますcfoo。C++ で記述している場合は、常にこれらのバージョンを優先する必要があります。

于 2009-04-16T21:52:22.983 に答える
0

C++ には、指数に対する/ のオーバーpowロードがあります。警告に注意してください。powfint

于 2009-04-16T21:28:39.763 に答える
0

フラグについてはわかりませんが、警告を取り除くのは簡単でした。「タスク リスト」の各警告をダブルクリックして、必要に応じて適切なキャストを追加します。

(double) my_variable

また

static_cast<double>(my_variable)

あいまいな警告が表示されている場合は、どこかに複数の pow 関数が定義されていると思います。とにかく自分の意見をはっきり言うほうがいいです。価値があるのは、私の投票は static_cast オプションです。

于 2009-04-16T21:04:20.040 に答える
0

Mehrdad が述べたように、#pragma warning構文を使用して警告を無効にします。ドキュメントはこちら - http://msdn.microsoft.com/en-us/library/2c8f766e.aspx

ただし、警告を非表示にするのではなく、警告を修正する傾向があります。

于 2009-04-16T21:09:51.853 に答える
0

これまたは警告を無視しないでください。それらを修正します。コンパイラはあなたの友達であり、あなたに良いコードを書かせようとします。タフな愛を信じる友達ですが、それはあなたの友達です。

unsigned int があり、float が必要な場合は、unsigned int を float に変換します。

MSDN ライブラリは、言語の VC++ 実装と IDE 自体の両方のドキュメントです。

于 2009-04-16T21:39:31.610 に答える