Compartilhar via


Erro do compilador C2603

'function': muitos objetos estáticos de escopo de bloco com construtores/destruidores na função

Em versões do compilador do Microsoft C++ antes do Visual Studio 2015 ou quando a opção do compilador /Zc:threadSafeInit- é especificada, há um limite de 31 para o 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 uma versão mais recente do conjunto de ferramentas do compilador do Microsoft C++ ou, se possível, remova a opção do 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 apenas uma matriz estática desse tipo e referencie membros individuais conforme necessário.

Exemplo

O seguinte código gera o erro C2603 e mostra um meio 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
}