#include "stdafx.h"
#include "math.h"
int _tmain(int argc, _TCHAR* argv[])
{
long int i,x,y,z;
for (i=1;i<100000;i++)
{
x=sqrt(i+100); /*x为加上100后开方后的结果*/
y=sqrt(i+268); /*y为再加上168后开方后的结果*/
if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平
方数*/
printf("\n%ld\n",i);
}
return 0;
}
错误描述以下:
错误 1 error C2668: “sqrt”: 对重载函数的调用不明确 d:\mydocuments\visual studio 2008\studysubject\studysubject\studysubject.cpp 14
错误 2 error C2668: “sqrt”: 对重载函数的调用不明确 d:\mydocuments\visual studio 2008\studysubject\studysubject\studysubject.cpp 15
11 个解决方案
#1
这样写:
我想是因为C++中sqrt()函数有多个重载的缘故
不过我不大懂C++……
x = (double)sqrt((double)(i + 100));
y = (double)sqrt((double)(i + 268));
我想是因为C++中sqrt()函数有多个重载的缘故
不过我不大懂C++……
#2
-------------- 构建: Debug in 11 ---------------
正在链接 控制台可执行: bin\Debug\11.exe
main.cpp
main.cpp(10) : error C2668: “sqrt”: 对重载函数的调用不明确
D:\CodeBlocksSVN\build\vc\include\math.h(589): 可能是“long double sqrt(long double)”
D:\CodeBlocksSVN\build\vc\include\math.h(541): 或 “float sqrt(float)”
D:\CodeBlocksSVN\build\vc\include\math.h(127): 或 “double sqrt(double)”
尝试匹配参数列表“(long)”时
#3
由于 i+100 可以是float,也可以是double,还有可能long double
所以造成了编译器无法识别调用那个重载的函数。
你可以用强制的类型转换:
double i = sqrt((double)9);
所以造成了编译器无法识别调用那个重载的函数。
你可以用强制的类型转换:
double i = sqrt((double)9);
#4
把文件名改成.c
#5
这是因为sqrt()这个函数的参数和返回值都要求是float或者double,而你的参数是int,就报错了。
所以你要强制类型转换,都强制转换为float或者doble类型,就可以来的。
所以你要强制类型转换,都强制转换为float或者doble类型,就可以来的。
#6
(double)x = (double)sqrt((double)(i + 100));
(double)y = (double)sqrt((double)(i + 268));
(double)y = (double)sqrt((double)(i + 268));
#7
还有浮点数,通常是不能用“==”来判断大小的。
如果要比较大小,可以这样才是正确的,
这个是和零比较的例子:
const float EPSINON = 0.00001;//此处根据精度定
if ((x > = - EPSINON) && (x <= EPSINON))
LZ可以根据自己情况再写,这样严密一些。
如果要比较大小,可以这样才是正确的,
这个是和零比较的例子:
const float EPSINON = 0.00001;//此处根据精度定
if ((x > = - EPSINON) && (x <= EPSINON))
LZ可以根据自己情况再写,这样严密一些。
#8
我发现公司上好多代码都是用==的。
#9
重载惹的祸 -- 天下没有白吃的午餐
#10
呵呵 ,
++
#11
既然用vc2008为何不用C++方式写代码?
#1
这样写:
我想是因为C++中sqrt()函数有多个重载的缘故
不过我不大懂C++……
x = (double)sqrt((double)(i + 100));
y = (double)sqrt((double)(i + 268));
我想是因为C++中sqrt()函数有多个重载的缘故
不过我不大懂C++……
#2
-------------- 构建: Debug in 11 ---------------
正在链接 控制台可执行: bin\Debug\11.exe
main.cpp
main.cpp(10) : error C2668: “sqrt”: 对重载函数的调用不明确
D:\CodeBlocksSVN\build\vc\include\math.h(589): 可能是“long double sqrt(long double)”
D:\CodeBlocksSVN\build\vc\include\math.h(541): 或 “float sqrt(float)”
D:\CodeBlocksSVN\build\vc\include\math.h(127): 或 “double sqrt(double)”
尝试匹配参数列表“(long)”时
#3
由于 i+100 可以是float,也可以是double,还有可能long double
所以造成了编译器无法识别调用那个重载的函数。
你可以用强制的类型转换:
double i = sqrt((double)9);
所以造成了编译器无法识别调用那个重载的函数。
你可以用强制的类型转换:
double i = sqrt((double)9);
#4
把文件名改成.c
#5
这是因为sqrt()这个函数的参数和返回值都要求是float或者double,而你的参数是int,就报错了。
所以你要强制类型转换,都强制转换为float或者doble类型,就可以来的。
所以你要强制类型转换,都强制转换为float或者doble类型,就可以来的。
#6
(double)x = (double)sqrt((double)(i + 100));
(double)y = (double)sqrt((double)(i + 268));
(double)y = (double)sqrt((double)(i + 268));
#7
还有浮点数,通常是不能用“==”来判断大小的。
如果要比较大小,可以这样才是正确的,
这个是和零比较的例子:
const float EPSINON = 0.00001;//此处根据精度定
if ((x > = - EPSINON) && (x <= EPSINON))
LZ可以根据自己情况再写,这样严密一些。
如果要比较大小,可以这样才是正确的,
这个是和零比较的例子:
const float EPSINON = 0.00001;//此处根据精度定
if ((x > = - EPSINON) && (x <= EPSINON))
LZ可以根据自己情况再写,这样严密一些。
#8
我发现公司上好多代码都是用==的。
#9
重载惹的祸 -- 天下没有白吃的午餐
#10
呵呵 ,
++
#11
既然用vc2008为何不用C++方式写代码?