C ++ pow()函数错误

时间:2015-03-03 13:54:16

标签: c++

我在C ++中创建了一个简单的代码

#include<math.h>

void main()
{
float a,x;

    cout<<"Enter value of a"<<endl;
    cin>>a;

    x = pow(a,0.5);
    cout<<x;
}

但它给了我错误:

Error for Pow() use with float in C++

当我按F12并转到pow()的定义时,会发现这6个重载:

math.h pow() overloads

正如我们所看到的,它显然有一个重载(double,double)和一个for(float,float),所以为什么当我将'a'声明为float并且在我更改其数据时工作正常时会出错-type到'b'?

4 个答案:

答案 0 :(得分:8)

这里的问题是文字0.5double,因此您使用一组参数调用pow,这些参数不能明确地匹配重载,以及哪种类型的转换不能应用于明确匹配现有的重载。您应该使用float literal 0.5f代替。

x = pow(a, 0.5f);

另请注意,#include <iostream>coutcin需要endl,您必须以全名引用它们({{1} },std::coutstd::cin),或使用声明

std::endl

最后,using std::cout; using std::cin; using std::endl; 不是void main()函数的有效签名之一。它必须返回int,所以

main

int main()

答案 1 :(得分:3)

您使用floatdouble进行调用。这种组合没有超载,而且有些组合足够模糊。

如果您想使用带有两个0.5f参数的重载,则

float会有float类型。

答案 2 :(得分:2)

您需要显式调用pow()

的重载函数
x = pow(a, 0.5f);

double y = pow(static_cast<double>(a), 0.5);

答案 3 :(得分:2)

您的通话完全pow的各种定义完全匹配,因此编译器正在尝试查看它是否可以自动转换您的某些参数以便它完全匹配,但这里有6个可能匹配的pow定义。您需要告诉编译器您想要哪一个。

您尝试调用的是pow(float, double),因为0.5是双字面值(一个浮点数!)。

如果您执行pow(a, 0.5f)示例,那么两个参数都是float,它将进行编译。当然你也可以选择其他5个重载中的任何一个。