比如使用:pow((double)x,y)即明确使用double pow(double,int)
1>d:\vs 2008 project\mytest素数\mytest素数\test.cpp(11) : error C2668: “sqrt”: 对重载函数的调用不明确 1> d:\program files\microsoft visual studio 9.0\vc\include\math.h(581): 可能是“long double sqrt(long double)” 1> d:\program files\microsoft visual studio 9.0\vc\include\math....
原出错代码: #include"stdio.h"#include"math.h"voidmain() {inti=1,m,k=1; printf("请输入数字:"); scanf("%d",&m); k=sqrt(m);for(;i<k;i++) {if(m%k==0)break; }if(i>k) { printf("是素数"); }else{ printf("不是素数"); } } 解决方法 k=sqrt((float)m);...
比如对于重载函数 A(double aa,double bb);A(float aa,float bb);A(char aa,char bb);//调用为int int i,j;A(i,j);//此时重载函数中没有int型参数的重载,就会报错调用不明确//正确用法A(double(i),double(j));//做强制转换,明确调用的函数补充,看了你其他的提问,图片看到了,错误...
你的图片是在 是看不清。不过解决问题的思路无非就是 1、找到重载函数出问题的位置。2、找到重载函数的定义,有几种定义方式,功能是什么。(重载函数是功能类似,函数名相同,参数返回值可以不同的函数,有多个,调用不明确就是编译器不知道要调用哪一个)3、根据需要的功能修改出问题位置的函数。
重载函数二义性,不知道用哪个转换将int转换之后更好,这三个函数都是标准转换,所以一样好。你可以用转换把int类型参数static_cast<T>(x),T可以是float就行,因为它应该足够表示int了。很多VC6下可以运行的程序,到了VC2008下,都不会直接通过,因为VC2008更标准了,VC6应该说有点老了。
控制台模式下编译无误。应该是在"stdafx.h"已经声明数学运算函数,去掉cmath声明试试。
这是因为pixel是整型吧,需要将参数强制装换成(double),结果自然是double了。result = sqrt((double)( pixel[0] - pixel[3] )*( pixel[0] - pixel[3] ) + ( pixel[1] - pixel[2] )*( pixel[1] - pixel[2] ));
m=sqrt(i);sqrt是float 或者double型的,如果用于int型,要这样:m=sqrt((float)i);