如何在主函数中访问订户类的公共变量?

时间:2019-08-29 15:35:40

标签: c++ class ros subscriber

我想访问我的代码的main()函数中在订户类中定义的listener::flow_message(一个公共变量)。在下面的代码中,我只是简单地打印了flow_message参数来显示问题。

我将flow_message的访问修饰符更改为private和protected,但是它得到了编译错误,我发现在主函数中访问此变量的唯一方法是将其定义为public。我可以使用以下命令在主菜单中获得一些属性,例如flow_message向量的大小:

list.flow_message.size();

但是例如,当我想访问flow_message向量的第一个成员时,使用以下命令,我会得到分段错误错误。

list.flow_message[0];



// this is my code for subscribing the optical flow data
// using a class for subscriber callback function:

#include<ros/ros.h>
#include<opencv_apps/FlowArrayStamped.h>
#include<opencv_apps/FlowArray.h>
#include<opencv_apps/Flow.h>
#include<opencv_apps/Point2D.h>
#include<vector>
#include<numeric>

using namespace std;

class listener
  {
     public:
     vector<opencv_apps::Flow> flow_message;
     void callback(const opencv_apps::FlowArrayStamped::ConstPtr& msg);

   };

void listener::callback(const opencv_apps::FlowArrayStamped::ConstPtr& msg)
  {
    listener::flow_message = msg->flow;
    ROS_INFO("i got it");
   }

int main(int argc, char **argv)
  {
     ros::init(argc, argv, "dataman");
     ros::NodeHandle n;
     listener list;
     ros::Subscriber sub = n.subscribe("/lk_flow/flows", 1, &listener::callback, &list);
     while(ros::ok())
       {
          cout << "this is it: " << list.flow_message[0] << endl;
          ros::spinOnce();
       }
     return 0;
  }

正如我之前提到的那样,我的错误是在运行时出现的:

 Segmentation fault (core dumped)

感谢您的任何帮助或评论...

1 个答案:

答案 0 :(得分:1)

您去获取select count(*) + -- everyone is counted once count(insc1) + count(insc2) + count(insc3) -- additional invitees from t; ,但从未将元素添加到向量中。如果向量为空,则flow_message[0]不存在。

在向量中添加太多元素,您应该发布一条消息。

但是您还应该检查向量中的元素:

flow_message[0]
相关问题