Как правильно инициализировать событие - PullRequest
1 голос
/ 02 октября 2019

Я студент и в настоящее время экспериментирую с настройками QoS в ROS 2. Я пытаюсь реализовать событие (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
};

Но тогда я получаю следующую ошибку (Избыточные элементы в скалярном инициализаторе).

Как исправить эту проблему и в каком из этих двух случаевсамый лучший? Или есть совершенно другой способ создания этого события?

Заранее спасибо!

1 Ответ

1 голос
/ 02 октября 2019

rmw_subscription_event_init принимает указатели в качестве аргумента, поэтому вам нужно передать адрес памяти ваших объектов rmw_subscription_t и rmw_event_t:

rmw_subscription_event_init(&deadline_missed, &sub1, RMW_EVENT_REQUESTED_DEADLINE_MISSED);

Вы также можете изменить определениеиз sub1 и deadline_missed должны быть указатели (как вы предлагали), но в этом случае вам необходимо правильно инициализировать указатели на ваши структуры. Я рекомендую прочитать эти отличные ответы для получения дополнительной информации.

...