C ++:从main访问私有字段和函数
我在职业生涯中只使用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 "list" #include "vector" #include "scan_node.h" #include "odom_node.h" #include "coord.h" class stage_listener{ public: stage_listener(); private: 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 distance (float, float, float, float, float); void nodes2text(std::vector, std::vector); int numOdom(); int numScan(); };
在关联的.cpp文件中,我写了一个main:
int main(int argc, char **argv){ char buffer [1024]; while(1){ int i = fscanf(stdin,"%s",buffer); if(strcmp("exit",buffer) == 0) exit(0); else if(strcmp("num_nodes",buffer) == 0){ ROS_INFO("Odometry nodes: %inScan nodes: %i",numOdom(),numScan()); } else{} } }
ROS_INFO函数是Willow Garage的ROS的一部分,你可以将它看作一个普通的printf,以相同的形式使用完全相同的参数。 在编译代码时,我得到以下内容:
/home/ubisum/fuerte_workspace/beginner/src/stage_listener.cpp: In function ‘int main(int, char**)’: /home/ubisum/fuerte_workspace/beginner/src/stage_listener.cpp:223:5: error: ‘numOdom’ was not declared in this scope /home/ubisum/fuerte_workspace/beginner/src/stage_listener.cpp:223:5: error: ‘numScan’ was not declared in this scope
你知道错误的原因吗? 在Java中,您可以访问私有字段/函数,所以我无法理解为什么在C ++中这是不可能的。
在Java中,您可以访问私有字段/函数
不,你不能,除非你使用反射。 这就是让私人事物变得完整的一点。 我认为你在这里混合了公共和私人。 (尽管你可以从类自己的main方法中访问java中的私有静态字段和方法)。 C ++中的主要功能与类没有关联(即使它是,您的代码仍然无法工作,因为您试图静态访问实例成员)。
这里有几件事。
首先,您需要使stage_listener对象调用其方法或使方法成为静态,然后使用作用域解析操作符调用函数,如果您希望对象共享相同的方法。 其次,你不能访问私有变量(这是OO语言中的数据隐藏点)。
因此,您需要在类中公开函数,并创建类的对象或使函数静态并使用范围解析运算符调用它们。 完全取决于你想完成什么。 我希望这有帮助。
通常,在C ++中,我们使用函数作为公共。
你做到了私密性,所以就在自己班的范围内,你可以访问它们。 所以,如果同时尝试在主体中使用它们,我们可以认为这些功能应该是公开的。
你需要声明这个类的一个对象。 所以你可以使用object.function()来访问函数。 命令。
链接地址: http://www.djcxy.com/p/72165.html