【问题标题】:How to correctly initialize an event如何正确初始化事件
【发布时间】:2019-10-02 09:54:35
【问题描述】:

我是一名学生,目前正在试验 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
};

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

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

提前致谢!

【问题讨论】:

    标签: c++ ros2


    【解决方案1】:

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

    rmw_subscription_event_init(&deadline_missed, &sub1, RMW_EVENT_REQUESTED_DEADLINE_MISSED);

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

    【讨论】:

      猜你喜欢
      • 2022-01-01
      • 2010-11-11
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 2021-02-25
      相关资源
      最近更新 更多