Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
"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);
}