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)
模糊的呼叫错误消失了.
归档时间: |
|
查看次数: |
948 次 |
最近记录: |