我找不到程序中的歧义,但编译器说check(int)和check(float)之间存在歧义

时间:2014-01-02 17:40:15

标签: c++

#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作为参数。当我编译程序编译器时发现两个函数之间的歧义。我无法想象这个案子。任何人都可以帮助我吗?

4 个答案:

答案 0 :(得分:4)

2.5的类型为double,而C ++并未说明一个缩小转化(intfloat)优先于另一个。因此电话不明确。

您可以通过调用check(2.5f)或(可能更有用)通过实施void check(double);而不是float重载来解决问题。

答案 1 :(得分:0)

2.5double,而不是float。没有完全匹配的重载,以及在参数转换后匹配的两个,因此存在歧义。

2.5更改为2.5f以指定float字面值。

答案 2 :(得分:0)

这是因为2.5是一个字面值。编译器不知道是将其转换为float还是int。

您可以将字母f放在最后

,将其设为 float 字面值

check(2.5f);

答案 3 :(得分:0)

在C ++中,默认情况下2.5将被编译器视为双字面,因此您必须在调用函数之前对文字进行类型转换,请按2.5f进行。