2

我正在尝试编译我使用 sqrt pow 和 fabs 等函数的程序。我确实包含了 math.h 但由于某种原因我得到了如下错误:

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

我拥有的其他功能也一样:

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

我尝试包括但仍然相同的错误。有谁知道他们为什么不被认可?我的文件是 .cpp 而不是 .c 但它是一个 MFC 项目。

谢谢

4

1 回答 1

8

这是因为这些函数针对以下几种类型进行了重载:float、double 和 long 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 回答