Errore del compilatore C3899
'var': l-value uso del membro dati initonly non è consentito direttamente all'interno di un'area parallela nella classe 'class'
Un membro dati initonly (C++/CLI) non può essere inizializzato all'interno di tale parte di un costruttore che si trova in un'area parallela . Ciò è dovuto al fatto che il compilatore esegue una rilocazione interna del codice, in modo che non sia più parte del costruttore.
Per risolvere il problema, inizializzare il membro dati initonly nel costruttore, ma all'esterno dell'area parallela.
Esempio
L'esempio seguente genera l'errore 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);
}