【发布时间】:2021-07-21 17:29:05
【问题描述】:
我有一个函数fun() 我希望在同一范围内重载。根据重载规则,参数的不同顺序应该允许函数重载,如here 所述。
代码:
#include "iostream"
using namespace std;
void fun(int i, float j)
{
cout << "int,float";
}
void fun(float i, int j)
{
cout << "float,int";
}
int main()
{
fun(20,20);
}
错误:
error: call of overloaded ‘fun(int, int)’ is ambiguous
15 | fun(20,20);
问题:
如果只有一个带有参数fun(int, float)的函数,它会被称为最佳匹配,那么为什么在这种情况下会抛出错误。
【问题讨论】:
-
你想要哪一个?
fun(20, 20.f)或fun(20.f, 20)? -
应该将哪个
20转换为float?第一还是第二?编译器无法自行决定,两者都一样好,所以它是模棱两可的 -
“不同的参数顺序应该允许函数的重载”——是的,只要参数的相同顺序(更确切地说,参数类型) 根本不允许重载。您的歧义不是来自重载的定义,而是来自重载的调用。您教程中的示例假定您使用
double, int或int, double调用这些函数。 -
@inarticulatus:不,这不是解决函数重载的方式。两位候选人同样优秀,所以这个称呼是模棱两可的。 (您的 Microsoft 链接没有说明以不同方式处理第一个参数。)
-
OT:应该是
#include <iostream>而不是#include "iostream"
标签: c++