1

我是一名学生,目前正在试验 ROS 2 中的 QoS 设置。我正在尝试实现 (RMW_EVENT_REQUESTED_DEADLINE_MISSED) 事件。

首先我声明订阅和事件:

static const rmw_subscription_t sub1
{
    "sub1", (void *) "gets deadline missed",  "topic1"
};
static const rmw_event_t deadline_missed =
{
    "event 1" , (void *) "deadline missed", RMW_EVENT_REQUESTED_DEADLINE_MISSED
};

之后我尝试初始化事件:

rmw_subscription_event_init(deadline_missed, sub1, RMW_EVENT_REQUESTED_DEADLINE_MISSED);

但我得到一个错误(没有匹配函数调用'rmw_subscription_event_init')

该程序建议我将订阅和事件声明更改为:

static const rmw_subscription_t *const sub1
{
    "sub1", (void *) "gets deadline missed",  "topic1"
};
static rmw_event_t *const deadline_missed =
{
       "event 1" , (void *) "deadline missed", RMW_EVENT_REQUESTED_DEADLINE_MISSED
};

但随后我收到以下错误(标量初始化程序中的多余元素)。

我该如何解决这个问题,这两种情况中哪一种是最好的?或者有没有完全其他的方式来创建这个事件?

提前致谢 !

4

1 回答 1

1

rmw_subscription_event_init将指针作为参数,因此您需要传递对象的内存地址rmw_subscription_trmw_event_t

rmw_subscription_event_init(&deadline_missed, &sub1, RMW_EVENT_REQUESTED_DEADLINE_MISSED);

您还可以更改sub1deadline_missed作为指针的定义(如您所建议的),但在这种情况下,您需要正确初始化指向您的结构的指针。我建议阅读这些出色的答案以获取更多信息。

于 2019-10-02T10:32:29.977 回答