A warning - comparison between signed and unsigned integer expressions [-Wsign-compare]的解决方法
来源:互联网 发布:查看oracle数据块大小 编辑:程序博客网 时间:2024/05/16 10:41
源程序是
/*********************产生观测模型****************************/void ProRobotics::GenObservations(float sd){//Generate observations.假设传感器能观察到机器人周围sd米内的所有特征 Point2f delta; //保存机器人位姿和landmarks的位置差值 float dst; float theta; //保存特征角,w.r.t robot frame observations.clear(); for(int i = 0; i < landmarks.size(); i++) { delta = landmarks.at(i) - Point2f(realPathpoints.back().x,realPathpoints.back().y); dst = norm(delta); if(dst < sd) { theta = atan2(delta.y,delta.y) - realPathpoints.back().z; dst += GenGaussianValue(sigma_r*sigma_r); theta+= GenGaussianValue(sigma_phi*sigma_phi); AngleWrap(theta); observations.push_back(Point3f(dst,theta,i)); } }}
编译时提示 for(int i = 0; i < landmarks.size(); i++)警告:/home/congleetea/导航/ProRobotics/prorobotics.cpp:303: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]。这个警告目的是防止一个负的符号型的数据转化为无符号型时,会产生一个不是我们想要的很大的数据,并且,大家都知道signed 和unsigned数据的范围也不同。
这里 for(int i = 0; i < landmarks.size(); i++)中,i是signed integer,landmarks.size()是unsigned。所以提示了comparison between signed and unsigned integer。解决的办法是:
1)将这一句改为 for(vector<Point2f>::size_type i = 0; i < landmarks.size(); i++)这种方法更精确,Point2f是landmarks的数据类型。
size_type是由string类类型和vector类类型定义的类型,用以保存任意string对象或vector对象的长度,标准库类型将size_type定义为unsigned类型。
2)将这一句改为 for(std::size_t i = 0; i < landmarks.size(); i++).
size_t 类型定义在cstddef头文件中,该文件是C标准库的头文件stddef.h的C++版。它是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小。在用下标访问元素时,vector使用vector::size_type作为下标类型,而数组下标的正确类型则是size_t。
1 0
- A warning - comparison between signed and unsigned integer expressions [-Wsign-compare]的解决方法
- Android之jni编译报错comparsion between signed and unsigned integer expressions解决办法
- iOS:“warning:comparison between pointer and integer”
- C warning“comparison between pointer and integer [enabled by default]”
- KeilMDK编译警告:warning: #514-D: pointless comparison of unsigned integer with a negative constant
- compare signed with unsigned
- warning : pointless comparison of unsigned integer with zero
- A tutorial on signed and unsigned integers
- A Technical Comparison between PDF and DJVU
- [Error] ISO C++ forbids comparison between pointer and integer [-fpermiss
- P31 signed and unsigned
- A Comparison between Focus-Group and In-Depth Interview
- signed unsigned 的区别
- signed and unsigned of verilog
- comparison between rand() and arc4random()
- Comparison Between NetCDF and HDF5
- pointless comparison of unsigned integer with zero
- pointless comparison of unsigned integer with zero
- 异构计算(Heterogeneous Compute)
- VC各种字符串转换
- MySQL的mysqldump工具的基本用法
- Modifying
- 图形与图像处理
- A warning - comparison between signed and unsigned integer expressions [-Wsign-compare]的解决方法
- 题目1195:最长&最短文本
- C函数的重要性
- U-BOOT移植过程详解: 附录
- MapReduce\Tez\Storm\Spark四个框架的异同
- 文件权限
- 进程通信常用方式
- How to Collect Errorstacks for use in Diagnosing Performance Issues. (文档 ID 1364257.1)
- (十六)递归算法与递归算法应用