Teilen über


Compilerfehler C3899

"var" : l-value use of initonly data member is not allowed directly within a parallel region in class 'class'

Bemerkungen

Ein initonly (C++/CLI) -Datenmemm kann nicht innerhalb dieses Teils eines Konstruktors initialisiert werden, der sich in einem parallelen Bereich befindet. Dies liegt daran, dass der Compiler eine interne Verlagerung dieses Codes durchführt, sodass er effektiv nicht mehr Teil des Konstruktors ist.

Um dies zu beheben, initialisieren Sie das initonly Data Member im Konstruktor, aber außerhalb des parallelen Bereichs.

Beispiel

Im folgenden Beispiel wird C3899 generiert.

// C3899.cpp
// compile with: /clr /openmp
#include <omp.h>

public ref struct R {
   initonly int x;
   R() {
      x = omp_get_thread_num() + 1000;   // OK
      #pragma omp parallel num_threads(5)
      {
         // cannot assign to 'x' here
         x = omp_get_thread_num() + 1000;   // C3899
         System::Console::WriteLine("thread {0}", omp_get_thread_num());
      }
      x = omp_get_thread_num() + 1000;   // OK
   }
};

int main() {
   R^ r = gcnew R;
   System::Console::WriteLine(r->x);
}