解决“sqrt”: 对重载函数的调用不明确

也是自己平时总结出来,希望可以对小白有帮助。高手勿喷。

假如原先是这样的: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)即可(运行成功)


以上这段是网上别人写的,但是我按照他这个还是不行。后来修改了地方,在参数上加上转换

即int diagonal = floor(sqrt((double)img.rows*(double)img.rows + (double)img.cols*(double)img.cols));(这是我运行的其中一部分的代码)

就可以成功运行了。

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值