c++ - 从 main 访问私有(private)字段和函数

标签 c++ function field private program-entry-point

在我的职业生涯中,我只用 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_node> odom_list;
    std::list<scan_node> scan_list;
    std::list<coord> corners_list;
    
    std::list<coord> polar2cart(std::vector<float>, float, float, float, float);
    void addOdomNode (const nav_msgs::Odometry);
    void addScanNode (const sensor_msgs::LaserScan);
    void extractCorners(std::vector<float>, float, float, float, float);
    int distance (float, float, float, float, float);
    void nodes2text(std::vector<odom_node>, std::vector<scan_node>);
    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: %i\nScan nodes: %i",numOdom(),numScan());
            }
            
            else{}
        }

}

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 中,您可以访问私有(private)字段/函数,所以我不明白为什么在 C++ 中这是不可能的。

最佳答案

In Java, you can access private fields/functions

不,你不能,除非你使用反射。这就是将某些东西私有(private)化的全部意义所在。我认为你在这里混淆了公共(public)和私有(private)。 (尽管您可以从类自己的 main 方法访问 java 中的私有(private)静态字段和方法)。 C++ 中的 main 函数不与类相关联(即使是,您的代码仍然无法工作,因为您试图静态访问实例成员)。

关于c++ - 从 main 访问私有(private)字段和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13609675/

相关文章:

javascript - JavaScript 中的幻灯片无法正常工作

javascript - 我可以从 JavaScript 中的绑定(bind)函数获取未绑定(bind)函数吗?

Django Admin - 预填充字段并设置为只读

c++ - 在 C++ 中显示数组地址(代码块)

c++ - 开始客户端/服务器网络编程的好地方?

python - 从Python中的另一个函数调用变量

c# - 使用父保护构造函数实例化子类字段

python - OpenERP onChange 事件选择

c++ - 如何在 AVX 中实现 floor(double)?

c++ - 类组合构造函数 d 必须显式初始化引用成员