Mos*_*she 18 c++ ambiguous-call
我正在为类编写C++程序,我的编译器抱怨"模糊"函数调用.我怀疑这是因为有几个函数使用不同的参数定义.
如何告诉编译器我想要哪一个?除了特定于案例的修复,是否有一般规则,例如类型转换,可以解决这些问题?
编辑:
在我的情况下,我尝试abs()在一个cout声明中调用,传入两个doubles.
cout << "Amount is:" << abs(amountOrdered-amountPaid);
EDIT2:
我包括这三个标题:
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
Run Code Online (Sandbox Code Playgroud)
EDIT3:
我已经完成了没有这个代码的程序,但为了完成这个问题,我已经重现了这个问题.逐字错误是:
打电话给'abs'是模棱两可的.
编译器提供三个版本abs,每个版本采用不同的数据类型作为参数.
mkb*_*mkb 21
发生的事情是你已经包括<cstdlib>(间接地,因为它被包括在内iostream)using namespace std;.此标头声明std了名称中的两个函数abs().一个接受并返回long long,另一个返回long.另外,全局命名空间(返回int)中的一个来自<stdlib.h>.
修复:好吧,abs()需要加倍<cmath>,这实际上会给你你想要的答案!
在abs由包括功能<cstdlib>被重载int和long和long long.既然你给一个double作为参数,编译器并没有一个确切的配合,所以它会尝试将转换double到一种abs接受,但它不知道它是否应该尝试转换它int,long或者long long,因此它是不明确的.
但你可能真的希望得到abs一个double并返回一个double.为此你需要包括<cmath>.由于double参数完全匹配,编译器不会抱怨.
<cstdlib>当您包含不应发生的其他标头时,似乎会自动包含它.编译器应该给出error: ‘abs’ was not declared in this scope或类似的东西.