Partager via


Erreur du compilateur C2512

'identifier' : aucun constructeur par défaut approprié disponible

Un constructeur par défaut, un constructeur qui ne nécessite aucun argument, n’est pas disponible pour la classe, la structure ou l’union spécifiées. Le compilateur fournit un constructeur par défaut uniquement si aucun constructeur défini par l’utilisateur n’est fourni.

Si vous fournissez un constructeur qui accepte un paramètre non void et que vous souhaitez autoriser la création de votre classe sans paramètres (par exemple, en tant qu’éléments d’un tableau), vous devez également fournir un constructeur par défaut. Le constructeur par défaut peut être un constructeur avec des valeurs par défaut pour tous les paramètres.

Exemple

Une cause courante d’erreur C2512 est lorsque vous définissez un constructeur de classe ou de struct qui accepte des arguments, puis que vous tentez de déclarer une instance de votre classe ou struct sans arguments. Par exemple, struct B ci-dessous déclare un constructeur qui requiert un char * argument, mais pas un qui ne prend aucun argument. Dans main, une instance de B est déclarée, mais aucun argument n’est fourni. Le compilateur génère C2512, car il ne peut pas trouver de constructeur par défaut pour B.

// C2512.cpp
// Compile with: cl /W4 c2512.cpp
// C2512 expected
struct B {
   B (char *) {}
   // Uncomment the following line to fix.
   // B() {}
};

int main() {
   B b;   // C2512 - This requires a default constructor
}

Vous pouvez résoudre ce problème en définissant un constructeur par défaut pour votre struct ou classe, tel que B() {}, ou un constructeur où tous les arguments ont des valeurs par défaut, telles que B (char * = nullptr) {}.