提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 2. Segmentation Fault
- 3. symbol lookup error: xxx undefined symbol xxx
- 4. error: 'XXX' has not been declared
- 5. symbol lookup error: xxx undefined symbol xxx
- C++ 常识学习
- STL六大部件
- 总结
前言
为什么要写这篇博客呢?有以下几个主要原因
- 我们再编译程序过程中总会遇到C++程序编译过程中会遇到各种奇奇怪怪的问题,为了针对这么问题解决的方法进行记录
- 从15年上大学到现在6年过去了,中间学过C,C++,Java,Python,C#。但是都是略懂,并没有很深入的去学习,都是再工程上见招拆招,却没有很深的语言功底,没有一门语言可以傍身,现在24岁,试想未来还是以这种浑浑噩噩的状态混下去是不行的,凡事预则立不预则废。为了以后做打算,不至于被淘汰,丢了饭碗,学一技之长以傍身。将来对自己也有交代。
- 同时也会掺杂一些C++ STL的知识
首先跟大家分享两个C++学习的网站,比网上的博客,知乎,简书等专业多了。看这些都是拾人牙慧,缺总是看到别人想让你看到的,可谓是管中窥豹,坐井观天。
国学大师林语堂说过:使用一个东西,却不明白它的道理,不高明。
第一个是C++Reference 。可千万不要因为它是英文的就退缩呀,仔细看看,很多英文其实都是编程里常用到的关键字。所以就还好了,还有就是区分我们与别人的不同就是我们能在细枝末节上的事情上不退缩。
第二个就是cppreference。
第三个就是gcc.gnu.org 希望小伙伴您能再遇到问题的时候首先利用好这三个网站,这样你就又一次在行动上超越了别人,一起加油吧!
本文会一直更新,所以请您动动小手收藏一下吧~
同时本文也会分为两大板块,一部分是犯错修改,也就是治病。另一部分是进行C++ 学习,也就是学医,防患于未然,或者为了以后的对阵下药!
提示:主要包括PCL、OpenCV、ROS等编译工作遇到的问题 # 犯错修改 ## 1. cannot convert ‘const _stamp_type {aka const ros::Time}’ to ‘uint64_t {aka long unsigned int}’ in assignment - **问题总结**:ros时间戳与PCL时间戳转换问题。 - **问题解决模板**:
ros::Time time_st = ros::Time::now ();
msg->header.stamp = time_st.toNSec()/1e3;
2. Segmentation Fault
- 问题总结:内存越界。
- 问题解决模板:
- 定义了指针以后记得初始化,在使用的时候记得判断是否为NULL;
- 在使用数组的时候是否被初始化,数组下标是否越界,数组元素是否存在等;
- 在变量处理的时候变量的格式控制是否合理等;
3. symbol lookup error: xxx undefined symbol xxx
- 问题总结:未加载相关include需要的环境,我的就是没有加载ros环境。
- 问题解决模板:
source 相对路径
例如: source /opt/ros/kinetic/setup.bash
4. error: ‘XXX’ has not been declared
- 问题总结:引用该类的头文件,cmake 中的target_link也没写错,却提示找不到该类。
- 问题解决模板:
- 要加入命名空间。
using namespace xxx;
- 找到引用库的位置,查看CMakeLists.txt 找到项目名字,将项目名字加入到自己的CMakeLists.txt中,例如
target_link_libraries(${PROJECT_NAME} INTERFACE lidar_perception lidar_failsafe)
,其中lidar_failsafe
就是要引入的库的名字。
而lidar_failsafe
的CMakeLists.txt 的内容如下图所示。
project(lidar_failsafe)
add_library(${PROJECT_NAME} STATIC failsafe.cc)
target_link_libraries(${PROJECT_NAME} PRIVATE lidar_visualizer)
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
5. symbol lookup error: xxx undefined symbol xxx
- 问题总结:未加载相关include需要的环境,我的就是没有加载ros环境。
- 问题解决模板:
source 相对路径
例如: source /opt/ros/kinetic/setup.bash
C++ 常识学习
STL六大部件
- 容器 (Containers)
- 分配器 (Allocators)
- 算法 (Algorithms)
- 迭代器 (Iterators)
- 适配器 (Adapters)
- 仿函式 (Functors)
总结
提示:这里对文章进行总结: