一、输出「??」

项目调试一个节点,打印 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 机器人技术 - 解决 ROS_INFO 不能正确输出 string 的问题!的更多相关文章

  1. ROS 机器人技术 - 广播与接收 TF 坐标

    上次我们学习了 TF 的基本概念和如何发布静态的 TF 坐标: ROS 机器人技术 - TF 坐标系统基本概念 ROS 机器人技术 - 静态 TF 坐标帧 这次来总结下如何发布一个自定义的 TF 坐标 ...

  2. ROS机器人程序设计(原书第2版)补充资料 教学大纲

    ROS机器人程序设计(原书第2版) 补充资料 教学大纲 针对该书稍后会补充教学大纲.教案.多媒体课件以及练习题等. <ROS机器人程序设计>课程简介 课程编号:XXXXXX 课程名称:RO ...

  3. ROS机器人星火计划公开课总结

    非常荣幸参加了两次星火计划公开课(上海站), 感谢NXROBO.EXBOT以及所有支持ROS机器人星火计划的小伙伴们. ----废话开始,与课程总结无关,可跳过---- 在国内20多年的求学生涯以及2 ...

  4. ros机器人开发概述

    1.       ROS项目开发流程? 参照古月大神写的ROS探索总结系列:http://blog.exbot.net/archives/619 具体项目设计可看看<程序员>杂志的最新一篇 ...

  5. ROSCon 2016视频和幻灯片发布 ROS机器人操作系统重要参考资料

    ROSCon 2016视频和幻灯片发布 By Tully Foote on 十月19,2016 7:28 AM 全部PPT下载地址:http://pan.baidu.com/s/1gf2sn2F RO ...

  6. ROS机器人程序设计-学习小结-

    ROS官网 |易科 |虞坤林 |古月居 |ROSClub 学习ROS相关书籍推荐:http://blog.csdn.net/zhangrelay/article/details/52244746 RO ...

  7. ROS机器人程序设计(原书第2版)补充资料 (柒) 第七章 3D建模与仿真 urdf Gazebo V-Rep Webots Morse

    ROS机器人程序设计(原书第2版)补充资料 (柒) 第七章 3D建模与仿真 urdf Gazebo V-Rep Webots Morse 书中,大部分出现hydro的地方,直接替换为indigo或ja ...

  8. ROS机器人程序设计(原书第2版)补充资料 (壹) 第一章 ROS系统入门

    ROS机器人程序设计(原书第2版)补充资料 (壹) 第一章 ROS系统入门 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. 第一章主要包括R ...

  9. 双缓冲解决控制台应用程序输出“闪屏”(C/C++,Windows)

    使用 C 语言编写游戏的小伙伴们想必起初都要遇到这样的问题,在不断清屏输出数据的过程中,控制台中的输出内容会不断地闪屏.出现这个问题的原因是程序对数据处理花掉的时间影响到了数据显示,或许你可以使用局部 ...

随机推荐

  1. React安装及使用

    学习React之前.你可能需要学习: Html5.Css3.React.Antd.js. Html5的学习网站:http://www.w3school.com.cn/ Css3学习网站:http:// ...

  2. JS 写逻辑判断,不要只知道用 if-else 和 switch

    我们在编写 JS 代码时,经常会遇到逻辑判断复杂的情况.一般情况下,可以用 if/else 或 switch 来实现多个条件判断,但会出现一个问题:随着逻辑复杂度的增加,代码中的 if/else 和 ...

  3. 【半译】扩展shutdown超时设置以保证IHostedService正常关闭

    我最近发现一个问题,当应用程序关闭时,我们的应用程序没有正确执行在IHostedService中的StopAsync方法.经过反复验证发现,这是由于某些服务对关闭信号做出响应所需的时间太长导致的.在这 ...

  4. CSS综合案例

    代码示例:新闻页面: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  5. Android_存储之文件存储

    前面几篇随笔 讲到的关于存储的,SharedPreferences.Room.数据库等 最终都是以文件形式 存储到手机上的(除特殊的存储于手机内存的:如Room可以创建内存数据库). 这些存储方式,A ...

  6. 读了这一篇,让你少踩 ArrayList 的那些坑

    我是风筝,公众号「古时的风筝」,一个不只有技术的技术公众号,一个在程序圈混迹多年,主业 Java,另外 Python.React 也玩儿的 6 的斜杠开发者. Spring Cloud 系列文章已经完 ...

  7. [JavaWeb基础] 021.Action中result的各种转发类型

    在struts2中, struts.xml中result的类型有多种,它们类似于struts1中的forward,常用的类型有dispatcher(默认值).redirect.redirectActi ...

  8. Java IO(十五)FilterReader 和 FilterWriter、FilterReader 子类 PushBackReader

    Java IO(十五)FilterReader 和 FilterWriter.FilterReader 子类PushBackReader 一.介绍 FilterReader 和 FilterWrite ...

  9. Vue 哈希换histroy

    这个需要后端支持一下 前端配置在router下的index.js配置如下: import Vue from 'vue' import Router from 'vue-router' import I ...

  10. 重学 Java 设计模式:实战单例模式

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 5个创建型模式的最后一个 在设计模式中按照不同的处理方式共包含三大类:创建型模式.结 ...