重载类型不匹配

时间:2011-03-08 16:59:37

标签: c++

如何在C ++中进行重载?我定义了两个重载函数,一个采用浮点数,另一个采用整数:

void myFunc(float a) { ... }
void myFunc(int a) { ... }

但是每当我尝试传递一个整数时,我都不能使用int版本,编译器会对一个模糊的调用感到恐慌。我只能使用浮动版本。不可思议?

感谢。

3 个答案:

答案 0 :(得分:3)

void f(int x)
{}
void f(float x)
{}

int main()
{
   int a = 2;
   f(a); //will unambiguously call f(int)
   f(3); //will unambiguously call f(int)
}

为什么呢?因为int->intexact match,它始终优于int-> float,即match with standard conversion。 如果这不是您遇到的行为,那么您的编译器是一个糟糕的编译器。无论如何,重载决策规则有点复杂。 This link可能有助于阐明它

答案 1 :(得分:1)

  

但是我不能使用int版本   每当我尝试传递一个整数时   编译器对一个含糊不清的恐慌   调用

没有。它不能抱怨,如果你把它称为,

int i=10;
myFunc(i); //myFunc(int) gets called!
myFunc(1); //again myFunc(int) gets called!

在这里看到自己:http://ideone.com/RI33a

没有歧义!

答案 2 :(得分:0)

您可能无意中使用chardouble调用它,编译器无法确定您实际需要的版本。