Rust errors / Types and traits
Rust compiler error · checked with rustc 1.99.0
Rust error E0609: no field on type
What it meansYou accessed a field that does not exist on that type. Often the value is wrapped (Option, Result, Box, Vec) and the field belongs to the inner type.
What rustc prints
error[E0609]: no field `foo` on type `StructWithFields` --> main.rs:8:18 | 8 | println!("{}", s.foo); // error: no field `foo` on type `StructWithFields` | ^^^ unknown field | = note: available field is: `x`
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.
Why it happens
opt.namewhereopt: Option<User>.- A typo, or a private getter method you should call instead.
How to fix it
1. Reach the inner value
if let Some(u) = &opt { println!("{}", u.name); }Other wordings of this error
no field on type, no field `
The compiler team's explanation
Attempted to access a nonexistent field in a struct.
Erroneous code example:
struct StructWithFields {
x: u32,
}
let s = StructWithFields { x: 0 };
println!("{}", s.foo); // error: no field `foo` on type `StructWithFields`
To fix this error, check that you didn't misspell the field's name or that the field actually exists. Example:
struct StructWithFields {
x: u32,
}
let s = StructWithFields { x: 0 };
println!("{}", s.x); // ok!From rustc --explain E0609 (1.99.0), part of the Rust project, MIT or Apache-2.0. Official page.
Related errors
- E0308mismatched types
- E0277the trait bound is not satisfied
- E0599no method named X found in the current scope
- E0433failed to resolve
- E0604only `u8` can be cast as `char`, not `u32`
- E0608cannot index into a value of type `u8`
- E0610`u32` is a primitive type and therefore doesn't have fields
- E0614type cannot be dereferenced
Up next
Often hit nextE0308: mismatched typesA related error from the same family.Read it next →Did this answer your question?