Megosztás a következőn keresztül:


C3899-fordítási hiba

"var": az "initonly" adattag l-értékének használata közvetlenül nem engedélyezett párhuzamos régión belül a "class" osztályban

Megjegyzések

Az initonly (C++/CLI) adatmező nem inicializálható a konstruktor olyan részén belül, amely párhuzamos régióban található. Ennek az az oka, hogy a fordító elvégzi a kód belső áthelyezését, így gyakorlatilag már nem része a konstruktornak.

A megoldáshoz inicializálja a initonly data tagot a konstruktorban, de a párhuzamos régión kívül.

Example

Az alábbi példa C3899-et hoz létre.

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