Errore del compilatore C2512
'identifier': nessun costruttore predefinito appropriato disponibile
Un costruttore predefinito, un costruttore che non richiede argomenti, non è disponibile per la classe, la struttura o l'unione specificate. Il compilatore fornisce un costruttore predefinito solo se non vengono forniti costruttori definiti dall'utente.
Se si specifica un costruttore che accetta un parametro non void e si vuole consentire la creazione della classe senza parametri , ad esempio come elementi di una matrice, è necessario fornire anche un costruttore predefinito. Il costruttore predefinito può essere un costruttore con valori predefiniti per tutti i parametri.
Esempio
Una causa comune dell'errore C2512 è quando si definisce un costruttore di classe o struct che accetta argomenti e quindi si tenta di dichiarare un'istanza della classe o dello struct senza argomenti. Di seguito, ad esempio, struct B
viene dichiarato un costruttore che richiede un char *
argomento, ma non un costruttore che non accetta argomenti. In main
viene dichiarata un'istanza di B, ma non viene fornito alcun argomento. Il compilatore genera l'errore C2512 perché non riesce a trovare un costruttore predefinito per 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
}
È possibile risolvere questo problema definendo un costruttore predefinito per lo struct o la classe, ad esempio B() {}
, o un costruttore in cui tutti gli argomenti hanno valori predefiniti, ad esempio B (char * = nullptr) {}
.