对 'abs' 的调用在 Objective-C++ 中不明确

Call to 'abs' is ambiguous in Objective-C++

我在这段代码中遇到了问题,它给出了错误 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;
}

call to some_function() is ambiguous.

有两个可能的原因
  1. 函数调用中的参数与任何函数中的参数都不匹配 声明.

    我希望数组 toValuespreviousValues 是同一类型。在这种情况下,检查值 toValues[idx] - previousValues[idx] 是否属于 abs() 允许作为参数的类型。根据 C++11 标准,允许的值为 intlong intlong long int

    也许您可以将 toValues[idx] - previousValues[idx] 的值转换为整数或其他允许的类型,以排除如下原因:

    (int)toValues[idx] - previousValues[idx]

  2. 同一个函数定义了多次

    abs() 是一个大量重载的函数。您可以使用多个 header 文件检查它是否多次包含在您的代码中。例如,包含 math.h 和 cmath.h 将导致重复的 abs() 函数,这将导致歧义。但是,这样包含 headers 没有任何意义。而是这样的包含是偶然的。