Condividi tramite


Errore del compilatore C2482

'identifier': inizializzazione dinamica dei dati 'thread' non consentiti nel codice gestito/WinRT

Osservazioni:

Nel codice gestito o WinRT, le variabili dichiarate tramite l'attributo modificatore della classe di archiviazione __declspec(thread) o l'identificatore di classe di archiviazione thread_local non possono essere inizializzate con un'espressione che richiede la valutazione in fase di esecuzione. Per inizializzare __declspec(thread) o thread_local dati in questi ambienti di runtime è necessaria un'espressione statica.

Esempio

L'esempio seguente genera l'errore C2482 nel codice gestito (/clr) e nel codice WinRT (/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++

Per risolvere questo problema, inizializzare l'archiviazione locale del thread usando un'espressione statica, constexpro costante. Eseguire separatamente qualsiasi inizializzazione specifica del thread.