【发布时间】:2019-08-29 15:35:40
【问题描述】:
我想在我的代码的 main() 函数中访问我在订阅者类中定义的listener::flow_message(一个公共变量)。在下面的代码中,我只是简单地打印了flow_message 参数来显示问题。
我将flow_message 的访问修饰符更改为私有和受保护,但它得到编译错误,我发现在主函数中访问此变量的唯一方法是将其定义为公共。我可以使用以下命令获取一些属性,例如 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)
感谢您的帮助或评论...
【问题讨论】:
标签: c++ class ros subscriber