C语言中的重载问题
来源:百度知道 编辑:UC知道 时间:2024/05/21 17:25:19
请看如下代码:
#include <stdio.h>
int sum(int a,int b)
{
return a+b;
}
float sum(float a,float b)
{
return a+b;
}
void main()
{
printf("%d \n",sum(1,2));
printf("%f \n",sum(1.3,2.4));
}
为什么会报一个这样的错误“‘sum' : ambiguous call to overloaded function”。
意思是说,调用sum()函数的重载不明确??是因为我在sum(1.3,2.4)中传参的问题吗?
#include <stdio.h>
int sum(int a,int b)
{
return a+b;
}
float sum(float a,float b)
{
return a+b;
}
void main()
{
printf("%d \n",sum(1,2));
printf("%f \n",sum(1.3,2.4));
}
为什么会报一个这样的错误“‘sum' : ambiguous call to overloaded function”。
意思是说,调用sum()函数的重载不明确??是因为我在sum(1.3,2.4)中传参的问题吗?
sum(1,2)可以是调用sum(int,int)也可以是调用sum(float,float)
因为传递进去的1和2,可以被编译器转换成sum(1.0,2.0),编译器不确定你要调用哪个
同理sum(1.2,2.4)也可能被编译器转换成sum(1,2),也不能确定你要调用哪个
sum(1.3,2.4)改成sum((float)1.3,(float)2.4)就可以了,如果写成sum((float)1.3,2.4)或者sum(1.3,(float)2.4)也可以通过编译,但是可能会有警告
用显示的类型转换来清楚地告诉编译器要调用哪个
这是因为编译器还是不够聪明
printf("%f \n",sum(1.3,2.4));
改成
printf("%f \n",sum(1.3f,2.4f));
就行了
请问你是C还是C++,C语言可以重载函数吗?
C是面向过程的 没有重载