温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

解决ROS_INFO不能正确输出string的问题

发布时间:2021-12-06 10:31:32 来源:亿速云 阅读:152 作者:柒染 栏目:大数据

今天就跟大家聊聊有关解决ROS_INFO不能正确输出string的问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

 

一、输出「??」

项目调试一个节点,打印 ROS 信息时发现设置的节点名称都是问号:

ROS_INFO("[%s]: camera_extrinsic_mat", kNodeName);
 
解决ROS_INFO不能正确输出string的问题  

看了下代码发现是自己把节点名称设置为 const,但是没有正确初始化 const 变量,导致输出了「??」,C++ 语法都忘记了,太菜了,以下是第一种初始化 const 的方法:

// 1. 先在类中定义
private:
 const std::string kNodeName;

// 2. 构造函数初始化列表后初始化
ClassName(): kNodeName("node_name")
 

第二种方法是加上 static 关键字:

// 1. 在类中定义静态 const 变量
private:
 static const std::string kNodeName;
 
// 2. 在类外进行 const 初始化
const std::string ClassName::kNodeName = "node_name";
 

我用的第二种方式,因为这样的 const 看起来比较直观,在构造函数初始化列表中赋值不容易被看到,以下是我修改后的代码:

// 1. lidar_camera_fusion.h
private:
 static const std::string kNodeName;

// 2. lidar_camera_fusion.cpp
const std::string LidarCameraFusion::kNodeName = "lidar_camera_fusion";

// 3. ROS_INFO
ROS_INFO("[%s]: camera_extrinsic_mat", kNodeName);
 

总结下 const 变量在类中的用法:

  • 构造函数参数初始化列表中初始化 const 变量
  • 将 const 变量声明为 static 类型,然后在类的外部初始化
 

二、输出乱码

正确初始化 const 变量后,发现 INFO 又输出乱码:

解决ROS_INFO不能正确输出string的问题  

找了下资料发现是因为 ROS_INFO 不能直接输出 std::string,需要转成 c_str

// 3. ROS_INFO
ROS_INFO("[%s]: camera_extrinsic_mat", kNodeName.c_str());
 

第二个乱码的原因是因为把 %s 错写成大写的 %S 了,改回来即可:

解决ROS_INFO不能正确输出string的问题  
// 3. 错写成大写的 %S 了
ROS_INFO("[%S]: camera_extrinsic_mat", kNodeName.c_str());

看完上述内容,你们对解决ROS_INFO不能正确输出string的问题有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI