对重载函数的调用不明确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 
#include 
#include 
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.

你可能感兴趣的:(笔记,c++)