红联Linux门户
Linux帮助
当前位置: 红联Linux门户 > Ubuntu

g++编译时abs()遇到无法理解的问题(已解决)

发布时间:2010-11-28 00:36:52来源:红联作者:chengshiding
[i=s] 本帖最后由 chengshiding 于 2010-11-28 01:26 编辑 [/i]

mian.cpp:56: error: call of overloaded ‘abs(int&)’ is ambiguous
/usr/include/c++/4.4/cmath:94: note: candidates are: double std::abs(double)
/usr/include/c++/4.4/cmath:98: note: float std::abs(float)
/usr/include/c++/4.4/cmath:102: note: long double std::abs(long double)
上面的意思是我的abs()有歧义,abs()的候选函数有上面列出的三个。但是我的代码里明明用的是int型的,编译器应该可以重载的阿。
代码太长了,这里我把示意性代码列出如下:
#include
#include
int a;
cin >> a;
a = abs(a);
如果把 a = abs(a) 改为 a = fabs(a) 时就可以了。不明白为什么
文章评论

共有 3 条评论

  1. yur 于 2010-12-19 01:00:52发表:

    good

  2. dhwoecv 于 2010-11-28 08:41:43发表:

    向楼主学习下

  3. chengshiding 于 2010-11-28 01:24:21发表:

    [i=s] 本帖最后由 chengshiding 于 2010-11-28 01:25 编辑 [/i]

    问题已解决:如下
    最佳解决方案:
    c语言书本上说,数学函数除了求整数的绝对值函数abs()之外,其余的函数都在头文件 math.h 中定义,包括对浮点数求绝对值的函数fabs()。
    c++中,包含的相应的头文件为,原则是前面加c,同时去掉.h 。
    例如:
    #include 对应 #include
    #include 对应 #include

    于是,在c++里
    使用abs()就用 #include
    使用fabs()就用 #include