Rust errors / Names, paths and imports
Rust compiler error · checked with rustc 1.99.0
Rust error E0026: struct `Thing` does not have a field named `z`
What it meansA struct pattern attempted to extract a nonexistent field from a struct.
What rustc prints
error[E0026]: struct `Thing` does not have a field named `z` --> main.rs:11:16 | 11 | Thing { x, z } => {} // error: `Thing::z` field doesn't exist | ^ struct `Thing` does not have this field | help: a field with a similar name exists | 11 - Thing { x, z } => {} // error: `Thing::z` field doesn't exist 11 + Thing { x, y } => {} // error: `Thing::z` field doesn't exist |
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 struct pattern attempted to extract a nonexistent field from a struct.
Erroneous code example:
struct Thing {
x: u32,
y: u32,
}
let thing = Thing { x: 0, y: 0 };
match thing {
Thing { x, z } => {} // error: `Thing::z` field doesn't exist
}
If you are using shorthand field patterns but want to refer to the struct field by a different name, you should rename it explicitly. Struct fields are identified by the name used before the colon : so struct patterns should resemble the declaration of the struct type being matched.
struct Thing {
x: u32,
y: u32,
}
let thing = Thing { x: 0, y: 0 };
match thing {
Thing { x, y: z } => {} // we renamed `y` to `z`
}From rustc --explain E0026 (1.99.0), part of the Rust project, MIT or Apache-2.0. Official page.
Related errors
Up next
Often hit nextE0425: cannot find value in this scopeA related error from the same family.Read it next →Did this answer your question?