Condividi tramite


Errore del compilatore C2603

'function': Troppi oggetti statici con ambito blocco con costruttori/distruttori nella funzione

Osservazioni:

Nelle versioni del compilatore Microsoft C++ prima di Visual Studio 2015 o quando viene specificata l'opzione del compilatore /Zc:threadSafeInit- è previsto un limite di 31 per il numero di oggetti statici che è possibile avere in una funzione inline visibile esternamente.

Per risolvere questo problema, è consigliabile adottare una versione più recente del set di strumenti del compilatore Microsoft C++ o, se possibile, rimuovere l'opzione del compilatore /Zc:threadSafeInit- . Se non è possibile, è consigliabile combinare gli oggetti statici. Se gli oggetti sono dello stesso tipo, prendere in considerazione l'uso di una singola matrice statica di tale tipo e fare riferimento a singoli membri in base alle esigenze.

Esempio

Il codice seguente genera l'errore C2603 e mostra un modo per correggerlo:

// C2603.cpp
// Compile by using: cl /W4 /c /Zc:threadSafeInit- C2603.cpp
struct C { C() {} };
extern inline void f1() {
    static C C01, C02, C03, C04, C05, C06, C07, C08, C09, C10;
    static C C11, C12, C13, C14, C15, C16, C17, C18, C19, C20;
    static C C21, C22, C23, C24, C25, C26, C27, C28, C29, C30, C31;
    static C C32;   // C2603 Comment this line out to avoid error
}