Partager via


Erreur du compilateur C3899

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

Un membre de données initonly (C++/CLI) ne peut pas être initialisé à l’intérieur de cette partie d’un constructeur qui se trouve dans une région parallèle . Cela est dû au fait que le compilateur effectue une réaffectation interne de ce code, de sorte qu’il ne fait plus partie du constructeur.

Pour résoudre ce problème, initialisez le membre de données initonly dans le constructeur, mais en dehors de la région parallèle.

Exemple

L’exemple suivant génère l’erreur C3899.

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