Макрос #define Синтаксис функции получил & ldquo; ожидаемое выражение перед знаком '{'. & Rdquo;

Просто нашел это решение ... Я попробовал, мне понравилось ..

Работает для междоменных iframe для рабочего стола и мобильных устройств!

Не знаю, fulproof yet

window.addEventListener('blur',function(){
      if(document.activeElement.id == 'CrossDomainiframeId'){
        //do something :-)
      }
});

Счастливое кодирование

0
задан Kathleen 18 January 2019 в 06:58
поделиться

2 ответа

Вам необходимо указать тип вместе с составным литералом C99 .

typedef struct conn_s { /*...*/ } conn_t;

#define ADV_1M_LEGACY_CONNECTABLE (conn_t){ /*...*/ }

int main() {
   conn_t conn = ADV_1M_LEGACY_CONNECTABLE;
}

Вот пример .

0
ответ дан okovko 18 January 2019 в 06:58
поделиться

Это слишком большой комментарий, поэтому это псевдо-ответ.

Вот приближение к MCVE - со значительной проблемой, что, когда я компилирую его, я не вижу ошибку, которую вы видите.

arm31.cpp

#include <cstdint>

typedef struct
{
    uint32_t    interval;
    uint16_t    duration;
    uint8_t     max_adv_evts;
    uint8_t     secondary_phy;
} ble_gap_adv_params_t;

typedef struct
{
    ble_gap_adv_params_t    adv_params;
    uint16_t                adv_program;
} ble_gap_adv_data_t;

#define ADV_1M_LEGACY_CONNECTABLE (ble_gap_adv_params_t) { \
        .interval = 29,                                    \
        .duration = 31,                                    \
        .max_adv_evts = 0,                                 \
        .secondary_phy = 0,                                \
}

static uint8_t advertising_init_common(ble_gap_adv_data_t *ble_gap_adv_data,
                                       ble_gap_adv_params_t adv_params)
{
    uint8_t advHandle = 19;
    ble_gap_adv_data->adv_params = adv_params;
    ble_gap_adv_data->adv_program = 31963;
    return advHandle;
}

#include <iostream>

int main()
{
    ble_gap_adv_data_t m_adv_data;
    uint8_t m_adv_handle = advertising_init_common(&m_adv_data,
                                                   ADV_1M_LEGACY_CONNECTABLE);
    std::cout
        << "handle:   " << m_adv_handle << ", "
        << "program:  " << m_adv_data.adv_program << ", "
        << "interval: " << m_adv_data.adv_params.interval << ", "
        << "duration: " << m_adv_data.adv_params.duration << ", "
        << "maxadvev: " << m_adv_data.adv_params.max_adv_evts << ", "
        << "secondph: " << m_adv_data.adv_params.secondary_phy << "\n";
}

Компиляция

$ g++ -O3 -g -std=c++11 -Wall -Wextra -Werror -c arm31.cpp
$

, которая не выдает предупреждений (на Mac с MacOS 10.14.2 Mojave, используя home- встроенный G ++ 8.2.0). Чтобы получать предупреждения, мне также нужно использовать -pedantic:

$ g++ -O3 -g -std=c++11 -Wall -Wextra -Werror -pedantic -c arm31.cpp
arm31.cpp: In function ‘int main()’:
arm31.cpp:18:9: error: C++ designated initializers only available with -std=c++2a or -std=gnu++2a [-Werror=pedantic]
         .interval = 29,                                          \
         ^
arm31.cpp:39:52: note: in expansion of macro ‘ADV_1M_LEGACY_CONNECTABLE’
                                                    ADV_1M_LEGACY_CONNECTABLE);
                                                    ^~~~~~~~~~~~~~~~~~~~~~~~~
arm31.cpp:19:9: error: C++ designated initializers only available with -std=c++2a or -std=gnu++2a [-Werror=pedantic]
         .duration = 31,                                          \
         ^
arm31.cpp:39:52: note: in expansion of macro ‘ADV_1M_LEGACY_CONNECTABLE’
                                                    ADV_1M_LEGACY_CONNECTABLE);
                                                    ^~~~~~~~~~~~~~~~~~~~~~~~~
arm31.cpp:20:9: error: C++ designated initializers only available with -std=c++2a or -std=gnu++2a [-Werror=pedantic]
         .max_adv_evts = 0,                                       \
         ^
arm31.cpp:39:52: note: in expansion of macro ‘ADV_1M_LEGACY_CONNECTABLE’
                                                    ADV_1M_LEGACY_CONNECTABLE);
                                                    ^~~~~~~~~~~~~~~~~~~~~~~~~
arm31.cpp:21:9: error: C++ designated initializers only available with -std=c++2a or -std=gnu++2a [-Werror=pedantic]
         .secondary_phy = 0,                                      \
         ^
arm31.cpp:39:52: note: in expansion of macro ‘ADV_1M_LEGACY_CONNECTABLE’
                                                    ADV_1M_LEGACY_CONNECTABLE);
                                                    ^~~~~~~~~~~~~~~~~~~~~~~~~
arm31.cpp:22:1: error: ISO C++ forbids compound-literals [-Werror=pedantic]
 }
 ^
arm31.cpp:39:52: note: in expansion of macro ‘ADV_1M_LEGACY_CONNECTABLE’
                                                    ADV_1M_LEGACY_CONNECTABLE);
                                                    ^~~~~~~~~~~~~~~~~~~~~~~~~
cc1plus: all warnings being treated as errors

Следующие шаги

Пожалуйста, возьмите этот исходный код и скомпилируйте его в своей системе. Затем повозитесь с ним, пока он не воспроизведет ошибку, которую вы видите. Затем опубликуйте этот исправленный код для редактирования вопроса.

0
ответ дан Jonathan Leffler 18 January 2019 в 06:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: