Teilen über


Compilerfehler C2482

'Identifier': dynamische Initialisierung von Threaddaten, die in verwaltetem/WinRT-Code nicht zulässig sind

Hinweise

Im verwalteten oder WinRT-Code können Variablen, die mithilfe des __declspec(Thread)-Speicherklassenmodifizierer-Attributs oder der thread_local Speicherklassenbezeichner deklariert werden, nicht mit einem Ausdruck initialisiert werden, der zur Laufzeit eine Auswertung erfordert. Für die Initialisierung __declspec(thread) oder thread_local Daten in diesen Laufzeitumgebungen ist ein statischer Ausdruck erforderlich.

Beispiel

Im folgenden Beispiel wird C2482 in verwaltetem (/clr) und im WinRT-Code (/ZW) generiert:

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

Um dieses Problem zu beheben, initialisieren Sie threadlokalen Speicher mithilfe einer Konstanten, constexpreines statischen Ausdrucks oder eines statischen Ausdrucks. Führen Sie eine threadspezifische Initialisierung separat aus.