2016-09-19 1 views
0

ef_vi_alloc_from_pd関数は、最後の引数として列挙型を受け入れる:C++コードの "c-style flags enum"の使い方は? <a href="https://github.com/majek/openonload/blob/master/src/lib/ciul/pt_endpoint.c" rel="nofollow">this c code</a>から

this c example
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) 

我々は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; 

しかし、私がやったときに、これは、あまりにもコンパイルされません "| =" Cからef_vi_alloc_from_pdを使用する方法error: invalid conversion from ‘int’ to ‘ef_vi_flags’ [-fpermissive]

を++?

  • vi_flagsの宣言方法とef_vi_alloc_from_pdの呼び出し方法は?
  • How to "| =" 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 = ... 'を使用してエラーを再度コンパイルしようとしました'引数 '1'を 'ef_vi_flags'から 'ef_vi_flags'に 'ef_vi_flags'を '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

関連する問題