Kompilatorfel C2603

"function" : För många statiska objekt med blockomfattning med konstruktor/destruktorer i funktionen

Anmärkningar

I versioner av Microsoft C++-kompilatorn före Visual Studio 2015, eller när kompileringsalternativet /Zc:threadSafeInit- anges, finns det en gräns på 31 för antalet statiska objekt som du kan ha i en externt synlig infogad funktion.

För att lösa det här problemet rekommenderar vi att du använder en nyare version av Microsoft C++-kompilatorverktygen, eller om möjligt tar du bort kompilatoralternativet /Zc:threadSafeInit- . Om detta inte är möjligt kan du överväga att kombinera dina statiska objekt. Om objekten är av samma typ bör du överväga att använda en enda statisk matris av den typen och referera till enskilda medlemmar efter behov.

Exempel

Följande kod genererar C2603 och visar ett sätt att åtgärda det:

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