2

sqrt pow や fabs などの関数を使用しているプログラムをコンパイルしようとしています。math.h が含まれていますが、何らかの理由で次のようなエラーが発生します。

    error C2668: 'fabs' : ambiguous call to overloaded function

これが含まれている残りの機能についても同じです:

    #include "stdafx.h"
    #include "math.h"

含めてみましたが、それでも同じエラーです。彼らが認識されていない理由を知っている人はいますか?私のファイルは.cではなく.cppですが、MFCプロジェクトです。

ありがとう

4

1 に答える 1

8

これは、float、double、long double などのいくつかの型に対して、これらの関数がオーバーロードされているためです。したがって、整数を渡すと、コンパイラはどちらを選択するかを決定しません。簡単な修正方法は、単純に double を渡す (または、渡した値に 1.0 を掛ける) ことです。これで問題が解決するはずです。

      int value = rand();
      int result1 = (int)fabs(value*1.0); 
      printf("%d, %d\n", result1, result1);

それ以外は:

     int value = rand();
     int result1 = (int)fabs((double)value); 
     printf("%d, %d\n", result1, result1);
于 2011-04-12T04:33:25.443 に答える