Error del compilador · error CS1729

'X' no contiene un constructor que tome N argumentos

Tu new X(…) no coincide con ningún constructor declarado. Nueve de cada diez veces la causa es la misma: en cuanto escribes CUALQUIER constructor, C# deja de ofrecer el constructor vacío — y los antiguos new X() se rompen.

Míralo ocurrir

class Persona
{
    public Persona(string nombre)
    {
        Console.WriteLine("creada " + nombre);
    }
}

Persona p = new Persona();     // CS1729: ahora solo existe el constructor (string)

Solución 1: pasa lo que el constructor pide

class Persona
{
    public Persona(string nombre)
    {
        Console.WriteLine("creada " + nombre);
    }
}

Persona p = new Persona("Ada");

Solución 2: recupera el constructor vacío

Si new Persona() es de verdad válido — los inicializadores de objeto rellenarán los datos — declara un constructor sin parámetros junto al otro:

class Persona
{
    public string Nombre { get; set; }

    public Persona() { }                  // constructor vacío explícito
    public Persona(string nombre) { Nombre = nombre; }
}

Persona p = new Persona { Nombre = "Ada" };  // vuelve a funcionar
Console.WriteLine(p.Nombre);

Por qué C# funciona así

El constructor vacío gratuito es una comodidad para clases sin necesidades de inicialización. Cuando declaras Persona(string nombre), estás afirmando "una Persona sin nombre no es válida" — así que C# retira el constructor que crearía una inválida. El error es el lenguaje aplicando tu propia regla.

Los constructores se sobrecargan como los métodos (misma familia, CS1501/CS7036) — y en la herencia, el constructor del hijo debe pasar sus argumentos al padre con : base(…):

class Estudiante : Persona
{
    public Estudiante(string nombre, int curso) : base(nombre)   // alimenta al padre
    {
        // ...
    }
}

Preguntas frecuentes

¿Qué significa CS1729?

new X(...) no coincide con ningún constructor declarado. Causa habitual: declarar un constructor elimina el vacío gratuito. Solución: pasa argumentos o añade un constructor vacío explícito.

¿Por qué new X() deja de funcionar?

El constructor vacío solo existe sin constructores declarados. Tras Persona(string nombre), C# retira new Persona(); vuelve a declararlo explícitamente si debe seguir siendo válido.

Lista de comprobación