Partilhar via


Erro do compilador C2603

'function' : Demasiados objetos estáticos de âmbito de bloco com construtores/destruidores em função

Observações

Em versões do compilador Microsoft C++ anteriores ao Visual Studio 2015, ou quando a opção de compilador /Zc:threadSafeInit- é especificada, há um limite de 31 no número de objetos estáticos que você pode ter em uma função embutida visível externamente.

Para resolver esse problema, recomendamos que você adote a versão mais recente do conjunto de ferramentas do compilador Microsoft C++ ou, se possível, remova a opção de compilador /Zc:threadSafeInit-. Se isso não for possível, considere combinar seus objetos estáticos. Se os objetos forem do mesmo tipo, considere o uso de uma única matriz estática desse tipo e faça referência a membros individuais conforme necessário.

Exemplo

O código a seguir gera C2603 e mostra uma maneira de corrigi-lo:

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