gpt4 book ai didi

c++ - 如何在主函数中访问订阅者类的公共(public)变量?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:02:07 24 4
gpt4 key购买 nike

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

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

list.flow_message.size();

但是例如,当我想访问 flow_message vector 的第一个成员时,使用下面的命令我得到了段错误。

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)

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

最佳答案

你去获取 flow_message[0] 但你永远不会将元素添加到 vector 中。如果 vector 为空,则 flow_message[0] 不存在。

在vector中添加太多元素,您应该发布消息。

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

while(ros::ok()) {
if (list.flow_message.empty()) {
std::cout << "no messages" << std::endl;
} else {
std::cout << "this is it: " << list.flow_message[0] << std::endl;
}

ros::spinOnce();
}

关于c++ - 如何在主函数中访问订阅者类的公共(public)变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57713532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com