私はキャリアの中で 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++でアクセスできない理由がわかりません。