Erreur du compilateur C2603
'function' : trop d’objets statiques d’étendue de bloc avec constructeur/destructeurs dans la fonction
Dans les versions du compilateur Microsoft C++ avant Visual Studio 2015 ou lorsque l’option du compilateur /Zc :threadSafeInit- est spécifiée, il existe une limite de 31 sur le nombre d’objets statiques que vous pouvez avoir dans une fonction inline visible en externe.
Pour résoudre ce problème, nous vous recommandons d’adopter la version plus récente de l’ensemble d’outils du compilateur Microsoft C++, ou si possible, de supprimer l’option du compilateur /Zc :threadSafeInit- . Si cela n’est pas possible, envisagez de combiner vos objets statiques. Si les objets sont du même type, envisagez d’utiliser un tableau statique unique de ce type et référencez des membres individuels selon les besoins.
Exemple
Le code suivant génère l’erreur C2603 et montre un moyen de le corriger :
// 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
}