2016-09-19 1 views
0

ef_vi_alloc_from_pd Funktion von this c code nimmt Enum als letztes Argument:wie "c-style flags enum" aus C++ Code zu verwenden?

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) 

In this c example wir Flaggen als unsigned vi_flags definieren und es funktioniert:

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)); 

Aber in C++ funktioniert es nicht, ich habe Fehler kompilieren beim Aufruf von ef_vi_alloc_from_pd error: invalid conversion from ‘unsigned int’ to ‘ef_vi_flags’ [-fpermissive]

Ich habe versucht, vi_flags als enum zu definieren:

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

Aber das Kompilieren nicht zu, wenn ich tun "| =" error: invalid conversion from ‘int’ to ‘ef_vi_flags’ [-fpermissive]

Wie ef_vi_alloc_from_pd von C++?

  • wie man vi_flags erklärt und wie man ef_vi_alloc_from_pd nennt?
  • wie zu "| =" vi_flags?
  • Hinzufügen von Optionen zum Compiler?
+3

Nur eine Besetzung verwenden. –

+0

eine Besetzung verwenden wann? Wann ändere ich Flags oder wenn ich Funktion anrufe? Wie deklariere ich vi_flags? – javapowered

Antwort

2

können Sie tun:

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

Ich habe solche Kompilierfehler 'erwartet ';' vor 'vi_flags' ef_vi_flags vi_flags = ef_vi_flags (EF_VI_FLAGS_DEFAULT | EF_VI_RX_TIMESTAMPS);'. versuchte, 'enum ef_vi_flags vi_flags = ...' zu verwenden und den Fehler erneut zu übersetzen 'kann 'ef_vi_flags' nicht in 'ef_vi *' für das Argument '1' in 'ef_vi_flags ef_vi_flags (ef_vi *)' konvertieren enum ef_vi_flags vi_flags = ef_vi_flags (EF_VI_FLAGS_DEFAULT) ; ' – javapowered

+0

Haben Sie' enum ef_vi_flags' irgendwo definiert? – Jarod42

+0

natürlich, zum Beispiel 'enum ef_vi_flags vi_flags = EF_VI_FLAGS_DEFAULT;' kompiliert gut – javapowered