解决ROS_INFO不能正确输出string的问题
发表于:2024-11-17 作者:千家信息网编辑
千家信息网最后更新 2024年11月17日,今天就跟大家聊聊有关解决ROS_INFO不能正确输出string的问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、输出「??」项目调试一
千家信息网最后更新 2024年11月17日解决ROS_INFO不能正确输出string的问题
今天就跟大家聊聊有关解决ROS_INFO不能正确输出string的问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
一、输出「??」
项目调试一个节点,打印 ROS 信息时发现设置的节点名称都是问号:
ROS_INFO("[%s]: camera_extrinsic_mat", kNodeName);
看了下代码发现是自己把节点名称设置为 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
不能直接输出 std::string
,需要转成 c_str
:
// 3. ROS_INFO
ROS_INFO("[%s]: camera_extrinsic_mat", kNodeName.c_str());
第二个乱码的原因是因为把 %s
错写成大写的 %S
了,改回来即可:
// 3. 错写成大写的 %S 了
ROS_INFO("[%S]: camera_extrinsic_mat", kNodeName.c_str());
看完上述内容,你们对解决ROS_INFO不能正确输出string的问题有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
输出
变量
乱码
内容
函数
节点
问题
代码
名称
大写
方法
直观
信息
关键
关键字
原因
参数
方式
更多
知识
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
知到数据库答案
网络安全专业信息对抗
怎么保存vb输入数据库中
宸凡网络技术有限公司
软件开发中需要哪些人员
cs架构的数据库用什么写
imapp服务器部署
网络安全培训福州
网络安全技术试卷
纵横论坛网络安全
山东悟空互联网科技有限公司骗人
工信局 网络安全保护
易语言快手协议软件开发
STANDBY下载软件开发
网络安全技术人员总结
安卓软件开发和java区别
湖南长沙曙湘网络技术开发
指数pe数据库
终端打开SQLite数据库文件
实际场景下的网络安全运用
屏蔽国外udp服务器
股票软件开发哪家好
徐州嘿逗科技互联网广告推广
富士电机上海软件开发有限公司
计算机网络技术习题册答案
车载网络技术PPT免费下载
服务器用显卡接显示器
信息与网络技术中心
分布式数据库5级映像
网络安全传播视频