Ошибка компилятора C3899
Var: использование элемента данных initonly не допускается непосредственно в параллельном регионе класса "class"
Не удается инициализировать элемент данных C++/CLI внутри этой части конструктора, который находится в параллельном регионе. Это связано с тем, что компилятор выполняет внутреннее перемещение этого кода, поэтому он фактически не является частью конструктора.
Чтобы устранить проблему, инициализировать элемент данных initonly в конструкторе, но за пределами параллельного региона.
Пример
Следующий пример создает 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);
}