error C2668: “sqrt”: 对重载函数的调用不明确?

来源:百度知道 编辑:UC知道 时间:2024/05/15 07:08:28
#include "stdafx.h"
#include<cmath>
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int m,k,i,n=0;
bool prime;
for(m=101;m<=200;m=m+2)
{
prime=true;
k=int(sqrt(m));
for(i=2;i<=k;i++)
if(m%i==0)
{
prime=false;
break;
}
if(prime)
{
cout<<setw(5)<<m;
n=n+1;
}
if(n%10==0)cout<<endl;
}
cout<<endl;
return 0;
}
上面是代码,下面是在VC2008上编译出的错:
error C2668: “sqrt”: 对重载函数的调用不明确
1> D:\Program Files\VC2008\VC\include\math.h(581): 可能是“long double sqrt(long double)”
1> D:\Program Files\VC2008\VC\include\math.h(533): 或 “float sqrt(float)”
1> D:\Program Files\VC2008\VC\include\math.h(128): 或 “double sqrt(double)”

重载函数二义性,不知道用哪个转换将int转换之后更好,这三个函数都是标准转换,所以一样好。你可以用转换把int类型参数static_cast<T>(x),T可以是float就行,因为它应该足够表示int了。很多VC6下可以运行的程序,到了VC2008下,都不会直接通过,因为VC2008更标准了,VC6应该说有点老了。

加一个include<math.h>