c++ - 对重载函数错误的奇怪模棱两可的调用

标签 c++ visual-c++

我在努力

void function(int y,int w)
{
    printf("int function");

}


void function(float y,float w)
{
    printf("float function");
}


int main()
{
    function(1.2,2.2);
    return 0;
}

我收到一个错误错误,例如..

error C2668: 'function' : ambiguous call to overloaded function

当我尝试调用 function(1.2,2)function(1,2.2) 时,它打印为“int function "

请说明function(float y,float w)何时会被调用?

最佳答案

查看来自gcc的错误信息:

a.cpp:16: error: call of overloaded ‘function(double, double)’ is ambiguous
a.cpp:3: note: candidates are: void function(int, int)
a.cpp:9: note:                 void function(float, float)

对任一函数的调用都需要截断,这就是为什么两者都不是首选的原因。我怀疑你真的想要 void function(double y,double w)。请记住,在 C/C++ 中,文本和参数传递的默认浮点类型是 double,而不是 float.

更新

如果您真的不想将 函数签名float 更改为 double,您可以随时使用 literals 类型为 float。如果您将后缀 f 添加到 float ,它们将被键入 float。

您的示例将是 function(1.2f, 2f)function(1, 2.2f)

关于c++ - 对重载函数错误的奇怪模棱两可的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16602175/

相关文章:

c++ - 编译器可以自动为最后一次使用左值生成 std​​::move 吗?

c++ - Qt 定价(最新)

c++ - 使用 Microsoft 编译器生成 CMOV 指令

c++ - MSVC 是否应该拒绝没有实例化的模板化使用

c++ - Microsoft 是否有一个网页保留了在最新 VC++ 中实现的 C++11 功能的最新列表?

c# - 将所有传出网络流量设置为通过某个代理

android - 如何使用c/c++代码在android系统下安装apk?

c++ - 为什么出现异常时不显示整数?

c++ - 如何根据条件声明一个对象并使其在函数的其余部分可用?

c++ - 嵌套的for循环不循环通过第二个数组