在我的职业生涯中,我只使用 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 "scan_node.h" #include “odom_node.h” #include “coord.h” 类 stage_listener{ 上市: stage_listener(); 私人的: std::list odom_list; std::list 扫描列表; std::listcorners_list; std::list polar2cart(std::vector, 浮点数, 浮点数, 浮点数, 浮点数); void addOdomNode (const nav_msgs::Odometry); 无效 addScanNode (const sensor_msgs::LaserScan); void extractCorners(std::vector, float, float, float, float); 整数距离(浮动,浮动,浮动,浮动,浮动); 无效节点2文本(std::vector,std::vector); int numOdom(); 整数扫描(); };
在相关的 .cpp 文件中,我写了一个 main:
int main(int argc, char **argv){ 字符缓冲区[1024]; 而(1){ int i = fscanf(stdin,"%s",buffer); 如果(strcmp(“退出”,缓冲区)== 0) 退出(0); 否则 if(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++ 中这是不可能的原因。