Aprende Rust · Guía 7 de 8 · 2 min

Los errores del compilador más comunes, y cómo resolverlos

Guía rápida de E0382, E0499, E0502, E0106, E0597 y E0308, con su causa y solución.

Todos estos errores son reales, y los verás en tus primeras semanas. Para cualquier otro, ejecuta rustc --explain E0382 con su código, o consulta el índice oficial.

E0382: uso de un valor movido

error[E0382]: borrow of moved value: `a`

Causa: el valor cambió de dueño y seguiste usando la variable anterior.

Solución: presta el valor con &, o usa .clone() si de verdad necesitas dos copias.

E0502: préstamo de lectura y escritura a la vez

error[E0502]: cannot borrow `v` as mutable because it is also borrowed as immutable

Causa: intentas modificar algo mientras todavía se usa una referencia de lectura.

Solución: termina de usar la referencia antes de modificar, o copia el dato que necesitas.

E0499: dos préstamos de escritura

error[E0499]: cannot borrow `s` as mutable more than once at a time

Causa: hay dos referencias &mut activas sobre el mismo valor.

Solución: usa una, termina con ella, y después usa la otra.

E0106: falta un lifetime

error[E0106]: missing lifetime specifier

Causa: una función devuelve una referencia, y Rust no puede deducir de cuál parámetro proviene.

Solución: indícalo con un lifetime, o devuelve un valor propio como String:

fn mas_largo<'a>(a: &'a str, b: &'a str) -> &'a str {
    if a.len() > b.len() { a } else { b }
}

E0597: el valor no vive lo suficiente

error[E0597]: `s` does not live long enough

Causa: una referencia sobrevive al valor al que apunta.

Solución: declara el valor en un alcance más amplio, o devuelve el valor en lugar de una referencia.

E0308: tipos que no coinciden

error[E0308]: mismatched types

Causa: el valor no tiene el tipo esperado. Es frecuente al confundir &str y String.

Solución: convierte de forma explícita, con .to_string() o .parse(), según el caso.

Construye mejor software.

Seguridad, eficiencia y oficio, con fuentes y en español.