다음을 통해 공유


컴파일러 오류 C3899

'var': 'class' 클래스의 병렬 영역 내에서 직접 initonly 데이터 멤버의 l-value 사용이 허용되지 않습니다.

병렬 지역에 있는 생성자의 해당 부분 내에서 initonly(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);
}