注册 登录
编程论坛 C++教室

这个程序是哪里错了?

小编程员 发布于 2009-09-05 12:52, 1094 次点击
#include<iostream.h>
int test(int,int,int);
float test(int,int,float=3.5F);
void main()
{test(1,2,3.2);
}
int test(int x,int y,int z)
{cout<<"调用的是第一个函数。"<<endl;
return 1;}
float test(int x,int y,float z)
{cout<<"调用的是第二个函数。"<<endl;
return 1.0;}
这是书上的一道改错题,上面说用float test(int,int,float=3.5F)重载int test(int,int,int)是错的,但我不知道为什么错,望高手给予会答!
14 回复
#2
leeco2009-09-05 13:03
重载没有错,哪个书上说错了?你把原话写出来看看。明明是调用有二义性
#3
hoho5682009-09-05 13:47
以下是引用小编程员在2009-9-5 13:38的发言:
嗯,是有二义性,那么二义性是再哪里?
第三个参数的 参数类型。一个为int一个为float
#4
最左边那个2009-09-05 22:31
float test(int,int,float=3.5F)
换成float test(int,int,double=3.5)就没错了
#5
kqscy12009-09-07 17:17
我认为是因为你float类型的那个test函数最后一个参数已经赋值,所以,你主函数中调用语句test(1,2,3.2)在选择使用函数时最后一个参数不匹配。如果把主函数test中最后一个参数去掉或者是改成3.5F就不会出错了。
楼上那位的改法在编译时没问题,但是在链接生成程序时就会因为参数不匹配出错
#6
forclwy2009-09-07 20:16
3.2 被认定为double类型,因此没有test函数中没有与之相匹配的函数,因此将
float test(int,int,float=3.5F) 改为:
float test(int,int,double=3.5)
是这样儿的吧
#7
最左边那个2009-09-08 20:40
回复 5楼 kqscy1
我用的是VC6.0能够编译连接成功
#8
xiaoshuaihu12009-09-12 15:30
#include<iostream.h>
int test(int,int,int);
float test(int,int,float=3.5F);
void main()
{
    test(1,2,3.2F);
}
int test(int x,int y,int z)
{
    cout<<"调用的是第一个函数。"<<endl;
    return 1;
}
float test(int x,int y,float z)
{
    cout<<"调用的是第二个函数。"<<endl;
    return 1.0;
}
#9
newCpp2009-09-12 16:29
程序代码:
#include<iostream.h>
int test(int,int,int);
float test(int,int,float=3.2);
void main()
{
    float d,k;
    int h,j;
    h=1;j=2;
    k=3.2;
    d=test(h,j,k);
}
int test(int x,int y,int z)
{
    cout<<"调用的是第一个函数。"<<endl;
return 1;
}
float test(int x,int y,float z)
{
    cout<<"调用的是第二个函数。"<<endl;
return 1.0;
}
这样好像就可以了!你看一下呢!
#10
小兰012009-09-13 15:42
没调用
这个主函数中没调用这两个函数,你所说的调用只是函数定义。
#11
kyozy2009-09-26 10:31
学习了
#12
haitao99992009-09-26 13:15
是第3个参数类型不明确的问题
主要是调用中的第3个参数类型不明确使函数调用产生了二义性。系统不知道是该使用int类型转换后调用第一个函数还是调用第2个函数。如果在程序调用中将第3个参数先赋值给一个变量如float  f = 3.2.则调用就很明确啦。如下在MinGW下运行良好。
#include <iostream>
using namespace std;

int test(int,int,int);
float test(int,int,float=3.5F);
int main()
{
    float f  = 3.2;
    test(1,2,f);
}
int test(int x,int y,int z)
{cout<<"调用的是第一个函数。"<<endl;
return 1;}
float test(int x,int y,float z)
{cout<<"调用的是第二个函数。"<<endl;
return 1.0;}
#13
Chost2009-09-26 22:24
回复 5楼 kqscy1
那为什么输出调用的是“调用的第二个函数”?
#14
逆光2009-10-04 12:28
调用时产生了歧义,应该将test(1,2,3.2)改为test(1,2,3.2f)指明3.2是浮点型才不会有歧义
#15
Chost2009-10-04 19:53
回复 3楼 hoho568
应该是double(int,int,double=3.5)
1