提示sqrt对重载函数调用不明确

#include "stdafx.h"
#include<iostream>
#include<cmath>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int m,i;
double k;
cout<<"输入大于1的正整数m:"<<endl;
cin>>m;
if(m==2) cout<<m<<"是素数"<<endl;
else{
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0) break;
if(i>k) cout<<m<<"是素数"<<endl;
else cout<<m<<"bushisushu "<<endl;
}
return 0;
}

这说明存在其他同名函数啊,你检查下有没有同名,系统产生歧义的时候才会出现这条提示的追问

只有打开一个文件没有在运行别的了

追答

我的意思是在你自己写的代码里面有没有定义sqrt同名函数,看你引用了
using namespace std;

重点检查下std里面的函数有没有对sqrt进行重载

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-21
m改成double m
另外for(i=2; i<=k; i++)有可能出错
应该为for(i=2; i<=k+0.1; i++)本回答被网友采纳
第2个回答  2012-07-21
将cmath改为math.h,sqrt属于C自带的函数,在C++中有所扩展...追问

提示无法打开包括文件。。。

第3个回答  2012-07-21
散装糖果色
第4个回答  2012-07-21
你没把数赋给m

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

编译时说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": 对重载函数的调用不明确 2 IntelliSense: 有多...
重载函数二义性,不知道用哪个转换将int转换之后更好。将sqrt调用改为:b = int(sqrt(float(i)));或者 b = int(sqrt(double(i)));

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] ));

...显示sqrt:对重载函数的调用不明确。 compilation error。
看了楼上的回答,对ACM的厌恶又增加了一分,感觉跟实际编程脱节太多了。其实楼主用不着用sqrt函数,直接for (i=2; i<=m\/2;i++) 也行。

...结果出现这样的错误: “sqrt”: 对重载函数的调用不明确。谢谢...
m=sqrt(i);sqrt是float 或者double型的,如果用于int型,要这样:m=sqrt((float)i);

求大神解答为什么老说我的“sqrt”: 对重载函数的调用不明确
_Check_return_ _CRT_JIT_INTRINSIC double __cdecl sqrt(_In_ double _X);首先重载:一个是函数个数不一致,一个是函数类型不一致;你上面的传入的是一个int 类型,原本内部的是一个double类型。

提示sqrt对重载函数调用不明确
这说明存在其他同名函数啊,你检查下有没有同名,系统产生歧义的时候才会出现这条提示的

...却不能用sqrt函数,提示:对重载函数的调用不明确??
int m =sqrt((double)i);C语言是没有重载的,C++才有,你应该是用C++的编译器来写C语言吧 在C++中sqrt有两个重载函数,一个参数是double,另一个是float 由于你传的参数是int在默认的隐式类型转换中int可以转换成float也可以转换为double,编译器就不知道你想调用哪一个。用强制的类型转换可以...

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

相似回答