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

来源:互联网 发布:09式单兵自热食品淘宝 编辑:程序博客网 时间:2024/05/24 01:11

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

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 <iostream>
#include <cmath>
int a;
cin >> a;
a = abs(a);
如果把 a = abs(a) 改为 a = fabs(a) 时就可以了。不明白为什么
问题已解决:如下
最佳解决方案:
c语言书本上说,数学函数除了求整数的绝对值函数abs()之外<abs() 定义在stdlib.h中>,其余的函数都在头文件 math.h 中定义,包括对浮点数求绝对值的函数fabs()。
c++中,包含的相应的头文件为,原则是前面加c,同时去掉.h 。
例如:
#include <cstdlib>对应        #include <stdlib.h>
#include <cmath>对应        #include <math.h>

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

0 0
原创粉丝点击