我在此代码段中遇到问题,它提供错误call to 'abs' is ambiguous
。
for (NSUInteger idx = 0; idx < count; idx++) {
if ((std::abs(toValues[idx] - previousValues[idx]) >= t) || (std::abs(previous2Values[idx] - previousValues[idx]) >= t)) {
return false;
}
return true;
}
答案 0 :(得分:0)
call to some_function() is ambiguous
有两种可能的原因。
函数调用中的参数与任何函数中的参数都不匹配
声明。
我希望数组toValues
和previousValues
属于同一类型。在这种情况下,检查值toValues[idx] - previousValues[idx]
是否是abs()允许的类型作为参数。根据C ++ 11标准,允许的值是 int , long int 和 long long int 。
也许您可以将toValues[idx] - previousValues[idx]
的值转换为整数或其他允许的类型,以排除这种情况,如下所示:
(int)toValues[idx] - previousValues[idx]
多次定义相同的功能
abs()是一个大量重载的函数。您可以使用多个头文件检查代码中是否多次包含它。例如,包含math.h和cmath.h将导致重复的abs()函数,这将导致歧义。但是,这样包含标题没有任何意义。相反,这种包含是偶然的。