c++ - 如何解决“错误:对‘abs’的调用不明确”
问题描述
我正在从 HackerRank 运行一个关于指针的简单 C++ 程序,它在网站上运行良好。但是,当我在 MacOS 上运行它时,我得到error: call to 'abs' is ambiguous
并且我不确定到底什么是模棱两可的。
我查看了类似问题的其他答案,但错误消息往往是Ambiguous overload call to abs(double)
,这不是我遇到的问题,因为我没有使用任何双打。我也尝试过包含头文件cmath
和math.h
,但问题仍然存在。
#include <stdio.h>
#include <cmath>
void update(int *a,int *b) {
int num1 = *a;
int num2 = *b;
*a = num1 + num2;
*b = abs(num1 - num2);
}
int main() {
int a, b;
int *pa = &a, *pb = &b;
scanf("%d %d", &a, &b);
update(pa, pb);
printf("%d\n%d", a, b);
return 0;
}
我的问题发生在第 8 行。
解决方案
完整的错误信息是:
$ clang++ test.cpp
test.cpp:8:10: error: call to 'abs' is ambiguous
*b = abs(num1 - num2);
^~~
.../include/c++/v1/math.h:769:1: note: candidate function
abs(float __lcpp_x) _NOEXCEPT {return ::fabsf(__lcpp_x);}
^
.../include/c++/v1/math.h:769:1: note: candidate function
abs(double __lcpp_x) _NOEXCEPT {return ::fabs(__lcpp_x);}
^
.../include/c++/v1/math.h:769:1: note: candidate function
abs(long double __lcpp_x) _NOEXCEPT {return ::fabsl(__lcpp_x);}
^
1 error generated.
abs
您拥有的三个重载<cmath>
是abs(float)
,abs(double)
和abs(long double)
; 这是模棱两可的,因为您有一个int
参数并且编译器不知道要转换为哪种浮点类型。
abs(int)
中定义<cstdlib>
,因此#include <cstdlib>
将解决您的问题。
如果您使用的是 Xcode,您可以在问题导航器 (⌘5) 中获取有关错误的更多详细信息,然后单击问题旁边的三角形。
推荐阅读
- powershell - Powershell不断发送密钥
- javascript - 原始字符串到普通字符串 javascript
- python - 使用python从多个zip文件中提取注释
- sql - 如何获取在 SQL 中具有重复列组合的记录?
- javascript - AES/CBC/PKCS5PADDING IV - 从 Java 到 NodeJs 的解密
- python - Windows Hello IR 摄像头可以用于开发目的吗?
- docker - 使用 Docker 配置 Kibana 监控
- arrays - 使用 2D 数组作为 3D 数组的索引
- c - 将 void * 指针变量类型转换为 unsigned int 到 uint32 时出现编译时错误
- json - 将 xml 输入转换为 json 格式,跳过父键但将其值处理给子键