问题描述
在学习ros使用的过程中遇到一个问题,我希望在一个namespace中使用std_msgs::String类型变量,但是意外得发现直接在命名空间中声明这个变量会导致无法识别,并且编译的时候会报错,具体的代码如下
#include "ros/ros.h"
#include "std_msgs/String.h"
#include <sstream>
namespace newspace{
std_msgs::String msg;
msg;
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "talker");
ros::NodeHandle n;
//省略部分main函数代码,省略部分代码已经经过验证,不会造成错误
}
报错内容
/home/cw/catkin_ws/src/beginner_tutorials/src/talker.cpp:11:5: error: ‘msg’ does not name a type
11 | msg;
| ^~~
make[2]: *** [beginner_tutorials/CMakeFiles/talker.dir/build.make:63:beginner_tutorials/CMakeFiles/talker.dir/src/talker.cpp.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:2274:beginner_tutorials/CMakeFiles/talker.dir/all] 错误 2
make: *** [Makefile:141:all] 错误 2
Invoking "make -j8 -l8" failed
我想过这个是不是因为命名空间之间的嵌套问题导致的,但是查阅了C++Primer Plus中对于命名空间的解释也没有得到答案,希望有了解ROS和C++的朋友能够不吝赐教,帮忙答疑一下,或者能够提醒我一下这个问题大概是出在了哪里。