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

#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)”
1> 试图匹配参数列表“(int)”时

在vc 6.0上编译没问题,可在vc2008就有问题了。
哪位大虾能指教一下,最好能说说应该怎么改,谢谢。

第1个回答  2009-09-27
改成这样
k=int(sqrt((float)m));
或者
k=int(sqrt((double)m));

vc2008更严格本回答被提问者和网友采纳
第2个回答  2020-03-01
可不可以给主要部分代码?
初步认定是result
=
(double)sqrt((
pixel[0]
-
pixel[3]
)*(
pixel[0]
-
pixel[3]
)
+
\
(
pixel[1]
-
pixel[2]
)*(
pixel[1]
-
pixel[2]
));
“+\”这个是什么运算

error C2668: "sqrt": 对重载函数的调用不明确
改成这样 k=int(sqrt((float)m)); 或者 k=int(sqrt((double)m)); vc2008更严格

error C2668: “sqrt”: 对重载函数的调用不明确
这是因为pixel是整型吧,需要将参数强制装换成(double),结果自然是double了。result = sqrt((double)( pixel[0] - pixel[3] )*( pixel[0] - pixel[3] ) + ( pixel[1] - pixel[2] )*( pixel[1] - pixel[2] ));

error C2668: "sqrt": 对重载函数的调用不明确 2 IntelliSense: 有多...
将sqrt调用改为:b = int(sqrt(float(i)));或者 b = int(sqrt(double(i)));

error C2668: "sqrt": 对重载函数的调用不明确 2 IntelliSense: 有多...
将sqrt调用改为:b = int(sqrt(float(i)));或者 b = int(sqrt(double(i)));

编译时说sqrt对重载函数调用不明确,为什么?
运行程序时出现下述错误:error C2668: “sqrt”: 对重载函数的调用不明确。1> d:\\vs2010\\vc\\include\\math.h(581): 可能是“long double sqrt(long double)”1> d:\\vs2010\\vc\\include\\math.h(533): 或 “float sqrt(float)”1> d:\\vs2010\\vc\\include\\math.h(128): 或 ...

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

VS2010 error C2668: “log”: 对重载函数的调用不明确
d:\\visual c++\\VC\\INCLUDE\\math.h(575): 可能是“long double log(long double)”d:\\visual c++\\VC\\INCLUDE\\math.h(527): 或 “float log(float)”d:\\visual c++\\VC\\INCLUDE\\math.h(120): 或 “double log(double)”都已经提示要如何修改了 ~~~...

c++“sqrt”:对重载函数的调用不明确?
c++语言中,sqrt函数的原型包括double, float, long三种类型。若n为int类型,由于可以转换为上述任意一种,编译器在调用sqrt函数时无法确定具体转换目标,从而导致了“sqrt: 对重载函数的调用不明确”的提示。解决这一问题,有以下两种方法:首先,明确声明n的类型为sqrt函数的原型类型之一,例如:double n...

error C2668: “sin”: 对重载函数的调用不明确! error C2668: “c...
include <math.h> define pi 3.14159 int main(){ int x=10;double y,z;while(x<=180){ y=sin(x);\/\/没提示错误 z=cos(x);x+=10;printf("角度:\\t%d\\t正弦:\\t%f\\t余弦:\\t%f\\n",x,y,z);\/\/这里应该是放在循环体内部的 } return 0;} 以上代码在我的VC++6.0上可以正常运行...

sqrt对重载函数的调用不明确
这个你需要强制类型转化,因为sqrt只支持double和float类型,你可以这样 c=(int) sqrt((double)a*a+b*b);或者c=(int) sqrt((float)a*a+b*b);

相似回答