【发布时间】:2012-11-16 13:49:10
【问题描述】:
在我的职业生涯中,我只使用 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++ 中这是不可能的原因。
【问题讨论】:
-
您必须在主文件中包含标题并在使用函数之前创建一个对象(必须公开才能在类外使用)。后者与 Java 相同。
-
您只使用 Java 编程,但您认为私有成员可以在课堂外访问?你的问题一定有问题。
-
在 Java 中,
main是一个类成员(或任何 Java 术语),因此可以访问 that 类的私有成员,但不能访问其他类的私有成员。也许这就是你的意思? -
我导入了 .h 文件,为简洁起见省略了包含。我的意思是,在 java 中,如果你从定义了这些函数/字段的类中包含的 main 内部执行此操作,则可以访问私有函数/字段
-
@user1860467 你正在尝试的仍然没有意义。在 Java 中,
main是一个static方法。你仍然需要为main创建一个类实例才能调用它的方法,除非所有有问题的方法也是static,但显然这里不是这种情况。
标签: c++ function field private main