2016-09-19 4 views
0

ef_vi_alloc_from_pd функция от this c code принимает перечисление как последний аргумент:Как использовать «c-style flags enum» из кода C++?

int ef_vi_alloc_from_pd(ef_vi* vi, ef_driver_handle vi_dh, 
      struct ef_pd* pd, ef_driver_handle pd_dh, 
      int evq_capacity, int rxq_capacity, int txq_capacity, 
      ef_vi* evq_opt, ef_driver_handle evq_dh, 
      enum ef_vi_flags flags) 

В this c example мы определяем флаги как unsigned vi_flags и он работает:

unsigned vi_flags; 
    vi_flags = EF_VI_FLAGS_DEFAULT; 
    if(cfg_timestamping) 
    vi_flags |= EF_VI_RX_TIMESTAMPS; 
    TRY(ef_vi_alloc_from_pd(&res->vi, res->dh, &res->pd, res->dh, 
          -1, -1, 0, NULL, -1, vi_flags)); 

Но в C++ это не работает, у меня есть ошибка компиляции при вызове ef_vi_alloc_from_pd error: invalid conversion from ‘unsigned int’ to ‘ef_vi_flags’ [-fpermissive]

Я попытался определить vi_flags как перечисление:

enum ef_vi_flags vi_flags; 
vi_flags = EF_VI_FLAGS_DEFAULT; 
vi_flags |= EF_VI_RX_TIMESTAMPS; 

Но это не компилируется тоже, когда я делаю "| =" error: invalid conversion from ‘int’ to ‘ef_vi_flags’ [-fpermissive]

Как использовать ef_vi_alloc_from_pd из C++?

  • как объявить vi_flags и как позвонить ef_vi_alloc_from_pd?
  • Как «| =» vi_flags?
  • добавить любые параметры в компилятор?
+3

Просто используйте бросок. –

+0

использовать литье когда? когда я изменяю флаги или когда вызываю функцию? как объявить vi_flags? – javapowered

ответ

2

Вы можете сделать:

ef_vi_flags vi_flags = ef_vi_flags(EF_VI_FLAGS_DEFAULT | EF_VI_RX_TIMESTAMPS); 
+0

У меня такая ошибка компиляции 'expected ';' before 'vi_flags' ef_vi_flags vi_flags = ef_vi_flags (EF_VI_FLAGS_DEFAULT | EF_VI_RX_TIMESTAMPS);'. попытался использовать 'enum ef_vi_flags vi_flags = ...' и снова скомпилировать ошибку 'не может преобразовать 'ef_vi_flags' в 'ef_vi *' для аргумента '1' в 'ef_vi_flags ef_vi_flags (ef_vi *)' enum ef_vi_flags vi_flags = ef_vi_flags (EF_VI_FLAGS_DEFAULT) ; ' – javapowered

+0

Определяли ли вы' enum ef_vi_flags'? – Jarod42

+0

, конечно, например, 'enum ef_vi_flags vi_flags = EF_VI_FLAGS_DEFAULT;' компилирует только штраф – javapowered

Смежные вопросы