将 m = pow(2, i) 改成 m = pow(2.0, i) 就好了,因为pow的那三个函数里面,没有哪个的第一个参数是int类型的。
调用不明确,因为C++重载的原因导致的.
你可以用 cmath 代替 math.h
另外,你可以用强制类型转换来达到使调用明确.
比如改成
m = (int)pow((long double)2,i);
或者
m = (int)pow((double)2,i);
或者
m = (int)pow((float)2,i);
来明确你的调用
在VC++6.0中原型为double pow( double x, double y );
头文件:cmath
功能:计算x的y次幂。
返回值:x不能为负数且y为小数,或者x为0且y小于等于0,返回幂指数的结果。
返回类型:double型,int,float会给与警告!
举例:
#include
#include
int main(void)
{
doublex=2.0,y=3.0;
printf("%lfraisedto%lfis%lf\n",x,y,pow(x,y));
return0;
}
C++提供以下几种pow函数的重载形式:
double pow(double X,int Y);
float pow(float X,float Y);
float pow(float X,int Y);
long double pow(long double X,long double Y);
long double pow(long double X,int Y);
使用的时候应合理设置参数类型,避免有多个“pow”实例与参数列表相匹配的情况。