Compartir a través de


Error del compilador C3899

"var": no se permite usar el valor lvalue del miembro de datos initonly directamente dentro de una región paralela en la clase "class"

No se puede inicializar un miembro de datos initonly (C++/CLI) dentro de esa parte de un constructor que no se encuentra en una región paralela. Esto se debe a que el compilador realiza una reubicación interna de ese código, de modo que, de hecho, ya no forma parte del constructor.

Para resolver el error, inicialice el miembro de datos initonly en el constructor, pero fuera de la región paralela.

Ejemplo

El ejemplo siguiente genera el error 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);
}