对重载函数的调用不明确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语言程序设计视频教程打包下载

重载的函数调用 double 是不明确的

C语言程序设计,谭浩强老师第三版里面的一个关于浮点型数据的舍入误差问题

谭浩强 C程序设计 8.5 写一个函数,使输入的一个字符串按返序存放

c++面向对象程序设计 谭浩强 第一章答案

谭浩强 C程序设计 8.10写一函数,输入一行字符,将此字符串中最长的单词输出。