私はキャリアの中で Java だけでプログラミングし、10 日前から C++ を使い始めたので、この質問は多くの人にとって奇妙に思えるかもしれません。ヘッダー ファイルでクラスの構造を定義しました。
#include "ros/ros.h" #include "nav_msgs/Odometry.h" #include "geometry_msgs/Pose.h" #include "geometry_msgs/Point.h" #include "stdio.h" #include "sensor_msgs/LaserScan.h" #include "リスト" #include "vector" #include "scan_node.h" #include "odom_node.h" #include "coord.h" クラスstage_listener{ 公衆: stage_listener(); プライベート: std::list odom_list; std::list scan_list; std::list corners_list; std::list polar2cart(std::vector, float, float, float, float); void addOdomNode (const nav_msgs::Odometry); void addScanNode (const sensor_msgs::LaserScan); void extractCorners(std::vector, float, float, float, float); int 距離 (float、float、float、float、float); void nodes2text(std::vector, std::vector); int numOdom(); int numScan(); };
関連する .cpp ファイルに、main を書きました。
int main(int argc, char **argv){ 文字バッファ [1024]; ながら(1){ int i = fscanf(stdin,"%s",buffer); if(strcmp("終了",バッファ) == 0) 終了 (0); それ以外の場合 (strcmp("num_nodes",buffer) == 0){ ROS_INFO("オドメトリ ノード: %i\nスキャン ノード: %i",numOdom(),numScan()); } そうしないと{} } }
ROS_INFO 関数は、Willow Garage の ROS の一部であり、通常の printf のように意図して、同じ形式で正確に引数を取ることができます。コードをコンパイルすると、次のようになります。
/home/ubisum/fuerte_workspace/beginner/src/stage_listener.cpp: 関数 'int main(int, char**)' 内: /home/ubisum/fuerte_workspace/beginner/src/stage_listener.cpp:223:5: エラー: 'numOdom' はこのスコープで宣言されていません /home/ubisum/fuerte_workspace/beginner/src/stage_listener.cpp:223:5: エラー: 'numScan' はこのスコープで宣言されていません
エラーの原因はわかりますか?Javaではプライベートフィールド/関数にアクセスできるので、C++でアクセスできない理由がわかりません。