Kompilatorfel C2482

"identifier" : dynamisk initiering av data för tråd är inte tillåten i hanterad/WinRT-kod

Anmärkningar

I hanterad kod eller WinRT-kod kan variabler som deklareras med hjälp av __declspec (tråd) lagringsklassmodifierarattribut eller thread_local storage class-specificeraren inte initieras med ett uttryck som kräver utvärdering vid körning. Ett statiskt uttryck krävs för initialisering av __declspec(thread) eller thread_local data i dessa exekveringsmiljöer.

Example

I följande exempel genereras C2482 i hanterad kod (/clr), och i WinRT-kod (/ZW):

// 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++

Åtgärda problemet genom att initiera trådlokal lagring med hjälp av ett konstant, constexpreller statiskt uttryck. Utför alla trådspecifika initieringar separat.