Compartir a través de


Error del compilador C2603

'función': hay demasiados objetos static en ámbito de bloque con constructores/destructores en la función

En versiones del compilador de Microsoft C++ anteriores a Visual Studio 2015 o cuando se especifica la opción /Zc:threadSafeInit- del compilador, hay un límite de 31 en el número de objetos estáticos que puede haber en una función insertada visible externamente.

Para resolver este problema, se recomienda usar una versión más reciente del conjunto de herramientas del compilador de Microsoft C++ o, si es posible, quitar la opción /Zc:threadSafeInit- del compilador. Si esto no es posible, considere la posibilidad de combinar los objetos estáticos. Si los objetos son del mismo tipo, considere la posibilidad de usar una sola matriz estática de ese tipo y hacer referencia a los miembros individuales según sea necesario.

Ejemplo

El ejemplo siguiente genera el error C2603 y muestra una manera de corregirlo:

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