#include<iostream.h>
#include<conio.h>
void check(int);
void check(float b);
void main()
{
clrscr();
check(10);
check(2.5);
getch();
}
void check(int c)
{
cout<<c;
}
void check(float b)
{
cout<<b;
}
我定义了两个名为check one take integer的函数作为参数,另一个函数使用float作为参数。当我编译程序编译器时发现两个函数之间的歧义。我无法想象这个案子。任何人都可以帮助我吗?
答案 0 :(得分:4)
2.5
的类型为double
,而C ++并未说明一个缩小转化(int
或float
)优先于另一个。因此电话不明确。
您可以通过调用check(2.5f)
或(可能更有用)通过实施void check(double);
而不是float
重载来解决问题。
答案 1 :(得分:0)
2.5
是double
,而不是float
。没有完全匹配的重载,以及在参数转换后匹配的两个,因此存在歧义。
将2.5
更改为2.5f
以指定float
字面值。
答案 2 :(得分:0)
这是因为2.5
是一个双字面值。编译器不知道是将其转换为float还是int。
您可以将字母f
放在最后
check(2.5f);
答案 3 :(得分:0)
在C ++中,默认情况下2.5将被编译器视为双字面,因此您必须在调用函数之前对文字进行类型转换,请按2.5f进行。