解决ROS_INFO不能正确输出string的问题
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,今天就跟大家聊聊有关解决ROS_INFO不能正确输出string的问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、输出「??」项目调试一
千家信息网最后更新 2026年11月02日解决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安全错误
数据库的锁怎样保障安全
互联网科技名片
科技金融是不是互联网金融
科技互联网龙头
互联网通讯科技
互联网中国科技
广州互联网科技公司
多迪互联网科技有限公司
科技类的互联网平台
移动互联网科技股
互联网金融科技公司干啥的
互联网时代科技改变生活
湖南诚度互联网科技有限公司
昭通互联网科技选哪家
呼和浩特新华互联网科技学院
银川新华互联网科技学校联系电话
互联网在线教育科技创业
高科技互联网套路
互联网营销推广黑科技
保山互联网科技靠谱吗
互联网科技品牌
山东特亿宝互联网科技有限公司
互联网科技社
互联网科技战争
广州互联网科技公司
极限挑战互联网科技
联恩商钥互联网科技有限公司
云创客互联网科技公司
重庆威客帮互联网科技
互联网科技产业特征
互联网科技平台产品运营