void foo(int,int) {}
void foo(int ,float) {}
void foo(float,int) {}
void main()
{
unsigned int i = 10;
unsigned float f = 1.0; //line 5
foo(i,f); // ambiguous call error
}
Run Code Online (Sandbox Code Playgroud)
替换第5行
float f = 1.0;
Run Code Online (Sandbox Code Playgroud)
使程序工作.为什么会这样?
我正在开发visual studio 2005.
没有这样的数据类型unsigned float.注意编译器警告; 如果你没有得到提升警告水平.从在Visual Studio 2010上运行此示例看起来,编译器会忽略float声明中的关键字
unsigned float f = 1.0;
Run Code Online (Sandbox Code Playgroud)
这样做f了unsigned int.既然你没有过载的foo()接受一个int和unsigned int编译器无法推断其超载打电话.如果添加另一个重载
void foo(int,unsigned int) {}
Run Code Online (Sandbox Code Playgroud)
模糊的呼叫错误消失了.