对重载函数的调用不明确sqrt的解决方案
Posted 诗子黎
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对重载函数的调用不明确sqrt的解决方案相关的知识,希望对你有一定的参考价值。
标题 对重载函数的调用不明确sqrt的解决方案
(本人曾经找过关于对重载函数的调用不明确sqrt的解决方案,但遗憾的是,在不收费的前提下没有找到具体的解决办法,所以在本人侥幸解决后,在这里将一种解决办法分享给大家~本人刚接触C++,问题理解难免有疏忽,还望各位指正~)
这是为了找出100~200间的全部素数 而写的代码,该代码出自
谭浩强所编写的《C++程序设计(第三版)》P78,例题3.14.
但是该代码有一处错误,会导致系统出现:
“error C2668: “sqrt”: 对重载函数的调用不明确
1> d:\\visual2010\\vc\\include\\math.h(589): 可能是“long double sqrt(long double)”
1> d:\\visual2010\\vc\\include\\math.h(541): 或 “float sqrt(float)”
1> d:\\visual2010\\vc\\include\\math.h(127): 或 “double sqrt(double)”
1> 尝试匹配参数列表“(int)”时
1>
1>生成失败。”
的提示,现在把代码附下,并提供一个解决方案:
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main ()
int m,k,i,n=0;
for (m=101;m<=200;m+=2)
bool 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;
解决方法:
将 k=int (sqrt(m))
;
改为 k=int (sqrt((double)m))
;
即可以解决问题。
(只是顺手写写玩玩……勿喷……)
PS:教材中初次关于重载函数的说明,在P101.
以上是关于对重载函数的调用不明确sqrt的解决方案的主要内容,如果未能解决你的问题,请参考以下文章
C语言程序设计,谭浩强老师第三版里面的一个关于浮点型数据的舍入误差问题