Condividi tramite


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 mainviene 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) {}.