vs2010转ubuntu总结
1.Math.h 问题:
在LINUX下面编辑*.c文件,你虽然已经使用#include<math.h>,但在使用sqrt(), pow()函数还是会碰到问题。
用GCC编译不带-lm选项时会得到这样的错误提示:
undefined reference to `
pow
'
如果你使用math.h里面的函数直接自己填充数值的话,是没有问题的。如pow(2, 3), 因为编译器编译的时候直接这个
值计算出来了。但是函数里面带有变量的话,如:pow(2, i).编译的时候无法直接算出这个值的,编译的时候需要连接
math.h。因此GCC编译带 -lm里面选项就会通过。
参考资料:
http://stackoverflow.com/questions/4174080/problem-using-pow-in-c
2.关于g++ memcpy’ was not declared in this scope解决方法
#include<iostream>
#include <cstring>
3.关于abc函数转换出现歧义问题:
我的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>
4.expected unqualified-id before ')' token" - fstream 问题
解决:1.将#include<fstream>去掉,用C函数的文件读写替换。
5.枚举值检索不到如:
typedef enum{
DEVFREE = 0,
DEVBUSY
}USESTATE;
解决:Symbol 'DEVBUSY' could not be resolved EnumTest.cpp /EnumTest line 11 Semantic Error,不用管,可以直接输出。
枚举前置定义检测不到,如下:
http://stackoverflow.com/questions/71416/forward-declaring-an-enum-in-c
http://blog.csdn.net/lizhongkan/article/details/6051580
http://www.linuxsky.org/doc/dev/200802/248.html
6. size_t -> ssize_t
7. #include<map> 后仍提示找不到map,加上 using namespace std; 即可。
8. memset不识别,引用<cstring> 即可。
9.bits/sstream.tcc :112: error: expected unqualified-id before '(' token 解决方法
在
#include <sstream>
之前加入
#undef max
#undef min
如下
#include ***
#undef max
#undef min
#include <sstream>
该错误主要是由于有些系统中已经定义了max,min宏。
http://www.cnitblog.com/ictfly/archive/2009/09/08/61305.html
10. ceilf() -> ceil()
11. Sleep()-> sleep() #include<ctime>
12.timer 使用问题:Symbol 'CLOCK_MONOTONIC' could not be resolved
http://stackoverflow.com/questions/8881617/constants-not-loaded-by-compiler