编译时说sqrt对重载函数调用不明确,为什么?

 我来答
百度网友b6af295
推荐于2019-11-09 · TA获得超过1.2万个赞
知道小有建树答主
回答量:15
采纳率:100%
帮助的人:3734
展开全部

假如原先是这样的:if (sqrt((x0-tx)*(x0-tx)+(y0-ty)*(y0-ty))<r0) //其中参数都是int。
运行程序时出现下述错误:
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): 或       “double sqrt(double)”
1>        试图匹配参数列表“(int)”时


原因是程序从VC6.0转到VS.net更高版本上运行,因为VS.net要求的更精确而造成了报错。
修改:在math.h中"sqrt"有三种类型 :long double sqrt(long double ),float sqrt(float),
double sqrt(double),所以任选一种对你的应用精度较好的参数和返回值类型,如float sqrt(float),将上述
if (sqrt((x0-tx)*(x0-tx)+(y0-ty)*(y0-ty))<r0)修改为:
if ((float sqrt((x0-tx)*(x0-tx)+(y0-ty)*(y0-ty)))<r0)即可(运行成功)

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式