Rust errors / Ownership and borrowing
Rust compiler error · checked with rustc 1.99.0
Rust error E0594: cannot assign to `ss.earth`, as `ss` is not declared as mutable
What it meansA non-mutable value was assigned a value.
What rustc prints
error[E0594]: cannot assign to `ss.earth`, as `ss` is not declared as mutable --> main.rs:8:1 | 8 | ss.earth = 2; // error! | ^^^^^^^^^^^^ cannot assign | help: consider changing this to be mutable | 7 | let mut ss = SolarSystem { earth: 3 }; | +++
Real output of rustc 1.99.0 compiling the official example below (2021 edition). Your names and line numbers will differ; the first line is the part to match.
The compiler team's explanation
A non-mutable value was assigned a value.
Erroneous code example:
struct SolarSystem {
earth: i32,
}
let ss = SolarSystem { earth: 3 };
ss.earth = 2; // error!
To fix this error, declare ss as mutable by using the mut keyword:
struct SolarSystem {
earth: i32,
}
let mut ss = SolarSystem { earth: 3 }; // declaring `ss` as mutable
ss.earth = 2; // ok!From rustc --explain E0594 (1.99.0), part of the Rust project, MIT or Apache-2.0. Official page.
Related errors
- E0382borrow of moved value
- E0499cannot borrow as mutable more than once at a time
- E0502cannot borrow as mutable because it is also borrowed as immutable
- E0106missing lifetime specifier
- E0581return type references lifetime `'a`, which is not constrained by the fn input types
- E0582binding for associated type `Output` references lifetime `'a`, which does not appear in the trait input types
- E0596cannot borrow as mutable, as it is not declared as mutable
- E0597does not live long enough
Up next
Often hit nextE0382: borrow of moved valueA related error from the same family.Read it next →Did this answer your question?