致电' abs'在Objective-C ++中是不明确的

时间:2015-11-15 11:21:29

标签: c++ objective-c std 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;
}

1 个答案:

答案 0 :(得分:0)

call to some_function() is ambiguous有两种可能的原因。

  1. 函数调用中的参数与任何函数中的参数都不匹配 声明。

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

    也许您可以将toValues[idx] - previousValues[idx]的值转换为整数或其他允许的类型,以排除这种情况,如下所示:

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

  2. 多次定义相同的功能

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