sqrt()pow()fabs()不起作用

kar*_*hik 2 c++ math c++03

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

    error C2668: 'fabs' : ambiguous call to overloaded function
Run Code Online (Sandbox Code Playgroud)

其他功能相同,包括:

    #include "stdafx.h"
    #include "math.h"
Run Code Online (Sandbox Code Playgroud)

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

谢谢

kar*_*hik 8

这是因为这些函数有几种类型的重载:float,double和long double.因此,如果传入一个整数,编译器就不会选择哪一个.一个简单的解决方法是简单地传递一个double(或乘以你传入的1.0),这应该可以解决问题.

      int value = rand();
      int result1 = (int)fabs(value*1.0); 
      printf("%d, %d\n", result1, result1);
Run Code Online (Sandbox Code Playgroud)

除此以外:

     int value = rand();
     int result1 = (int)fabs((double)value); 
     printf("%d, %d\n", result1, result1);
Run Code Online (Sandbox Code Playgroud)

  • `static_cast`比乘以`1.0`要好得多,因为它使代码清晰. (7认同)
  • 或者您可以使用std :: abs,它具有int的重载. (2认同)