Compartir a través de


Error del compilador C2512

"identificador": no hay disponible un constructor predeterminado adecuado

No hay disponible un constructor predeterminado, un constructor que no requiere argumentos, para la clase, estructura o unión especificada. El compilador proporciona un constructor predeterminado solo si no se han proporcionado constructores definidos por el usuario.

Si usted proporciona un constructor que toma un parámetro distinto de void y desea permitir que la clase se cree sin parámetros (por ejemplo, como los elementos de una matriz), también debe proporcionar un constructor predeterminado. El constructor predeterminado puede ser un constructor con valores predeterminados para todos los parámetros.

Ejemplo

Una causa común del error C2512 es cuando se define un constructor de clase o estructura que toma argumentos y, a continuación, se intenta declarar una instancia de la clase o estructura sin ningún argumento. Por ejemplo, struct B a continuación declara un constructor que requiere un argumento char *, pero no uno que no toma ningún argumento. En main, se declara una instancia de B, pero no se proporciona ningún argumento. El compilador genera el error C2512 porque no encuentra un constructor predeterminado para 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
}

Puede corregir este problema definiendo un constructor predeterminado para la estructura o clase, como B() {}, o un constructor donde todos los argumentos tienen valores predeterminados, como B (char * = nullptr) {}.