溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

解決ROS_INFO不能正確輸出string的問題

發(fā)布時間:2021-12-06 10:31:32 來源:億速云 閱讀:138 作者:柒染 欄目:大數(shù)據(jù)

今天就跟大家聊聊有關解決ROS_INFO不能正確輸出string的問題,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

 

一、輸出「??」

項目調(diào)試一個節(jié)點,打印 ROS 信息時發(fā)現(xiàn)設置的節(jié)點名稱都是問號:

ROS_INFO("[%s]: camera_extrinsic_mat", kNodeName);
 
解決ROS_INFO不能正確輸出string的問題  

看了下代碼發(fā)現(xiàn)是自己把節(jié)點名稱設置為 const,但是沒有正確初始化 const 變量,導致輸出了「??」,C++ 語法都忘記了,太菜了,以下是第一種初始化 const 的方法:

// 1. 先在類中定義
private:
 const std::string kNodeName;

// 2. 構(gòu)造函數(shù)初始化列表后初始化
ClassName(): kNodeName("node_name")
 

第二種方法是加上 static 關鍵字:

// 1. 在類中定義靜態(tài) const 變量
private:
 static const std::string kNodeName;
 
// 2. 在類外進行 const 初始化
const std::string ClassName::kNodeName = "node_name";
 

我用的第二種方式,因為這樣的 const 看起來比較直觀,在構(gòu)造函數(shù)初始化列表中賦值不容易被看到,以下是我修改后的代碼:

// 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);
 

總結(jié)下 const 變量在類中的用法:

  • 構(gòu)造函數(shù)參數(shù)初始化列表中初始化 const 變量
  • 將 const 變量聲明為 static 類型,然后在類的外部初始化
 

二、輸出亂碼

正確初始化 const 變量后,發(fā)現(xiàn) INFO 又輸出亂碼:

解決ROS_INFO不能正確輸出string的問題  

找了下資料發(fā)現(xiàn)是因為 ROS_INFO 不能直接輸出 std::string,需要轉(zhuǎn)成 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());

看完上述內(nèi)容,你們對解決ROS_INFO不能正確輸出string的問題有進一步的了解嗎?如果還想了解更多知識或者相關內(nèi)容,請關注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI