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

C++ sqrt()pow()fabs()不起作用,c++,math,c++03,C++,Math,C++03,我正在尝试编译我的程序,我正在使用像sqrt pow和fabs这样的函数。我确实包含math.h,但由于某些原因,我会出现如下错误: error C2668: 'fabs' : ambiguous call to overloaded function 其余函数也是如此 这包括: #include "stdafx.h" #include "math.h" 我试着包括但仍然是相同的错误。 有人知道为什么他们没有被认出来吗? 我的文件是.cpp而不是.c,但它是一个MFC

我正在尝试编译我的程序,我正在使用像sqrt pow和fabs这样的函数。我确实包含math.h,但由于某些原因,我会出现如下错误:

    error C2668: 'fabs' : ambiguous call to overloaded function
其余函数也是如此 这包括:

    #include "stdafx.h"
    #include "math.h"
我试着包括但仍然是相同的错误。 有人知道为什么他们没有被认出来吗? 我的文件是.cpp而不是.c,但它是一个MFC项目


谢谢,这是因为这些函数重载了几种类型:float、double和longdouble。因此,如果传入一个整数,编译器不会选择哪个整数。一个简单的解决方法是简单地传递一个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);

是否对同一函数使用两个不同的调用?删除了“C”标记,因为这不涉及C语言。您应该包括触发错误的实际代码。在错误描述中,您将得到的是有人告诉您,模棱两可的调用意味着编译器无法决定在两个重载中哪一个是最好的…另一个问题是,在哪里或者接受@karthik的答案。停止这种伪造的投票农业。添加了C++03标记,因为这已在C++11中修复。它现在对所有算术类型都重载了。请注意,在整数上使用
fabs
(浮点abs)是个坏主意。改为使用
std::abs
。加0.0比乘1.0好。
static\u cast
比乘
1.0好得多,因为它使代码更清晰。@Mark:不管怎样,编译器实际上都不会做任何算术。但是@Kirill是完全正确的。@Kirill:在两种方式中,编译器都做相同的事情,或者您可以使用std::abs,它对int有重载。