问题:我在编译使用自定义消息包的时候,不小心多敲了一个空格,没检查出来,每次catkin_make都会报错,经过好多次的编译才终于发现了问题所在,这个错误很浪费时间,分享出来供大家参考
#include<qq_msgs/carry.h >
#include<qq_msgs/carry.h>
这一行:
#include <qq_msgs/carry.h >
多了一个空格,应该写成:
#include <qq_msgs/carry.h>
✅ 总结一句话
先生成消息 → 再编译依赖包 → 再编译你的节点。
#include<qq_msgs/carry.h >这句代码相比于这句#include<qq_msgs/carry.h>有啥区别
区别只有一个:多了一个空格。
#include <qq_msgs/carry.h >
// 这里多了个空格 ↑
相比之下:
#include <qq_msgs/carry.h>
// 没有空格 ↑
✅ 编译器视角
-
GCC/Clang 对
#include指令的 头文件名 是严格按字符匹配的。 -
文件名是
carry.h,不是carry.h(带空格)。 -
所以:
#include <qq_msgs/carry.h >
会去找一个** literally 叫 carry.h 的文件**(注意空格),结果找不到,于是报错:
fatal error: qq_msgs/carry.h : 没有那个文件或目录
✅ 总结
空格也算文件名的一部分。
写#include时,尖括号里必须是文件名的精确拷贝,不能多也不能少。
✅ 建议
-
用 自动补全(VS Code、CLion、Vim+YouCompleteMe 都会帮你补全文件名)。
-
写完后 看一眼有没有多余空格,尤其是行末。
一句话:
多一个空格,文件就找不到。

被折叠的 条评论
为什么被折叠?



