Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
'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);
}