Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
"'var': l-value-användning av initonly-datamedlem är inte tillåten direkt inom en parallell region i klassen 'klass'"
Anmärkningar
Det går inte att initiera en initonly-datamedlem (C++/CLI) i den delen av en konstruktor som befinner sig i en parallell region. Detta beror på att kompilatorn gör en intern omlokalisering av koden, så att den i praktiken inte längre är en del av konstruktorn.
För att lösa problemet, initiera initonly-datamedlemmen i konstruktorn, men utanför det parallella området.
Example
I följande exempel genereras 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);
}