Rust errors / Types and traits
Rust compiler error · checked with rustc 1.99.0
Rust error E0614: type cannot be dereferenced
What it meansThe * operator was used on something that is not a reference or smart pointer.
What rustc prints
error[E0614]: type `u32` cannot be dereferenced
--> main.rs:4:1
|
4 | *y; // error: type `u32` cannot be dereferenced
| ^^ can't be dereferencedReal 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
- Writing
*xon a plain integer, often after pattern matching already gave you the value.
How to fix it
1. Drop the *
Pattern bindings like |&x| already dereference.
v.iter().map(|&x| x * 2)Other wordings of this error
type cannot be dereferenced
The compiler team's explanation
Attempted to dereference a variable which cannot be dereferenced.
Erroneous code example:
let y = 0u32;
*y; // error: type `u32` cannot be dereferenced
Only types implementing std::ops::Deref can be dereferenced (such as &T). Example:
let y = 0u32;
let x = &y;
// So here, `x` is a `&u32`, so we can dereference it:
*x; // ok!From rustc --explain E0614 (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
- E0609no field on type
- E0610`u32` is a primitive type and therefore doesn't have fields
- E0615attempted to take value of method on type
- E0617can't pass `f32` to variadic function
Up next
Often hit nextE0308: mismatched typesA related error from the same family.Read it next →Did this answer your question?