次の方法で共有


コンパイラ エラー C2482

'identifier': 動的な 'thread' ローカル データの初期化はマネージド/WinRT コードでは許可されません

解説

マネージド コードまたは WinRT コードでは、__declspec(thread) ストレージ クラス修飾子属性または thread_local ストレージ クラス指定子を使用して宣言された変数は、実行時に評価が必要な式で初期化することはできません。 これらのランタイム環境で、__declspec(thread) または thread_local データを初期化するには、静的な式が必要です。

次の例では、マネージド (/clr) および WinRT (/ZW) コードで C2482 を生成します。

// C2482.cpp
// For managed example, compile with: cl /EHsc /c /clr C2482.cpp
// For WinRT example, compile with: cl /EHsc /c /ZW C2482.cpp
#define Thread __declspec( thread )
Thread int tls_i1 = tls_i1;   // C2482

int j = j;   // OK in C++; C error
Thread int tls_i2 = sizeof( tls_i2 );   // Okay in C and C++

この問題を解決するには、定数、constexpr、または静的な式を使用して、スレッド ローカル ストレージを初期化します。 スレッド固有の初期化は、個別に実行します。