关于重载函数的问题

xyzyz 2007-04-18 01:24:36
#include<iostream>
#include<math.h>
using namespace std;

class Distance{
public:
int distance(int a1,int b1,int c1,int d1)
{
int x1,y1,L1;
x1=c1-a1;y1=d1-b1;
L1=sqrt(x1*x1+y1*y1);
cout<<"The distance is :"<<L1<<endl;
}

double distance(double a2,double b2,double c2,double d2)
{
double x2,y2,L2;
x2=c2-a2;y2=d2-a2;
L2=sqrt(x2*x2+y2*y2);
cout<<"The distance is:"<<L2<<endl;
}
};

int main()
{
Distance D;
D.distance(6,8,3,4);
D.distance(7.9,4.9,8.7,4.7);
cin.get();
return 0;
}
错误提示如下:
error C2668: “sqrt”: 对重载函数的调用不明确
请教该如何解决这个问题?
...全文
1302 40 打赏 收藏 转发到动态 举报
写回复
用AI写文章
40 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanglei5695312 2010-03-21
  • 打赏
  • 举报
回复
error C2668: “sqrt”: 对重载函数的调用不明确
buggycode 2007-04-23
  • 打赏
  • 举报
回复
什么编成能力啊。晕

L1=(int)(sqrt((float)(x1*x1+y1*y1))+0.5);
linking86 2007-04-22
  • 打赏
  • 举报
回复
恩, 我是用vc++,只要在两个成员函数分别加个返回值就可以了
sqrt是math.h里面的,应该不是sqrt的问题吧,估计是编译器的问题!

wuyanchao 2007-04-22
  • 打赏
  • 举报
回复

具有一样功能的重载 建议用 c++模板
wuyanchao 2007-04-22
  • 打赏
  • 举报
回复
除了没有return值以外,没有错误了!
qinhaichao 2007-04-21
  • 打赏
  • 举报
回复
#include<iostream>
#include<math.h>
using namespace std;

class Distance{
public:
int distance(int a1,int b1,int c1,int d1)
{
int x1,y1,L1;
x1=c1-a1;y1=d1-b1;
L1=sqrt(x1*x1+y1*y1);
cout<<"The distance is :"<<L1<<endl;
return distance ;
}

double distance(double a2,double b2,double c2,double d2)
{
double x2,y2,L2;
x2=c2-a2;y2=d2-a2;
L2=sqrt(x2*x2+y2*y2);
cout<<"The distance is:"<<L2<<endl;
return distance ;
}
};

int main()
{
Distance D;
D.distance(6,8,3,4);
D.distance(7.9,4.9,8.7,4.7);
cin.get();
return 0;
}
====================================================================================
编译的时候系统报错了,distance 是应该有一个返回值。已经运行通过。
Raul_Shao 2007-04-20
  • 打赏
  • 举报
回复
没有返回值
dyk155 2007-04-20
  • 打赏
  • 举报
回复
在vc 6.0中:
加上return L1;return L2; 后编译通过.
qt_freelancer 2007-04-20
  • 打赏
  • 举报
回复
可以
在函数中加上返回值
如 return 0;
做鸡真好吃 2007-04-19
  • 打赏
  • 举报
回复
mark~
Dinosaur_ya 2007-04-19
  • 打赏
  • 举报
回复
北京普尔世纪是一家高新软件开发企业,秉持着创新(Innovation)、整合(Intergration)、速度(Acceleration)与国际化(Internationalization)的愿景,及其专业的软件开和软件销售,通信设备销售。通过普尔世纪一支精锐的软件开发、销售队伍,为客户提供高竞争力与创新的软件产品、通信设备。

现因业务发展,需招聘2名技术人员
1. 精通 c#和c++语言
2. 具银行行业软件开发经验佳
3. 有良好的沟通、领悟能力
4. 有较好的团队合作精神
7. 有良好的敬业精神,能够承受较大的工作压力
工资薪金待遇:
适用期三个月,适用期薪金3000,转为正式员工的薪金适工作能力再议,如员工在工作中为公司的发展做出较大贡献者,公司视情况给予分派公司股份.


有意者可以将简历发到的我邮箱yanmeiying_aa@sina.com
lin_style 2007-04-19
  • 打赏
  • 举报
回复
vc6.0就这破毛病拉~
xyzyz 2007-04-19
  • 打赏
  • 举报
回复
原题是这样要求的:
使用函数重载的方法定义两个重载函数,分别求出整型数的两点距离和实型数的两点间距离

想问大家我上面的做法有没错了?
xyzyz 2007-04-19
  • 打赏
  • 举报
回复
现在反倒是加了return语句之后程序运行不成功了..

who can tell me the reasons?
xyzyz 2007-04-19
  • 打赏
  • 举报
回复
有些郁闷啊
换了个编译器结果就可以运行成功了
在dev c++ 4.9.9.2中可以成功运行
连return语句都不用就可以运行成功了

现在搞不明白了
不同的编译之间怎么差别那么大呢?
那我以后该用什么编译器环境好啊?
现在我基本上用着dev c++跟VS 2005
lightnut 2007-04-18
  • 打赏
  • 举报
回复
sqrt有三种重载形式:

double sqrt(double);
float sqrt(float);
long double sqrt(long double);

您在 int Distance::Distance()中的调用:
int x1,y1,L1;
L1=sqrt(x1*x1+y1*y1);
编译器不知道将您的int参数转换成float, double还是long double, 所以报C2668错误.

将 L1=sqrt(x1*x1+y1*y1) 改成
L1=sqrt( (double)(x1*x1)+y1*y1), 或 L1=sqrt( float(x1*x1)+y1*y1), 或
L1=sqrt( (long double((x1*x1)+y1*y1)
即可.当然, 结果转换为int会丢失精度, 编译器会给您警告信息.

最后, 您的两个distance函数需要返回相应的值!


;



x360995630 2007-04-18
  • 打赏
  • 举报
回复
奇怪,我在DEV C++4.9.9.2中一下就通过了啊
结果也出来了 好像没错啊 你那个编译器太垃圾了
ooolxf 2007-04-18
  • 打赏
  • 举报
回复
是不是因为没打补丁啊(vc++6.0),我这加上返回值后就ok...
user2007 2007-04-18
  • 打赏
  • 举报
回复
在VC++6.0中编译有2处错误,是没有返回值,,加上return L1;和return L2;后编译执行正常.
angus1982wang 2007-04-18
  • 打赏
  • 举报
回复
奇怪,我在DEV C++4.9.9.2中一下就通过了啊
加载更多回复(20)

65,213

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧