Rust errors / Types and traits
Rust compiler error · checked with rustc 1.99.0
Rust error E0411: cannot find type `Self` in this scope
What it meansThe Self keyword was used outside an impl, trait, or type definition.
What rustc prints
error[E0411]: cannot find type `Self` in this scope
--> main.rs:3:2
|
2 | fn main() {
| ---- `Self` not allowed in a function
3 | <Self>::foo; // error: use of `Self` outside of an impl, trait, or type
| ^^^^ `Self` is only available in impls, traits, and type definitionsReal 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
The Self keyword was used outside an impl, trait, or type definition.
Erroneous code example:
<Self>::foo; // error: use of `Self` outside of an impl, trait, or type
// definition
The Self keyword represents the current type, which explains why it can only be used inside an impl, trait, or type definition. It gives access to the associated items of a type:
trait Foo {
type Bar;
}
trait Baz : Foo {
fn bar() -> Self::Bar; // like this
}
However, be careful when two types have a common associated type:
trait Foo {
type Bar;
}
trait Foo2 {
type Bar;
}
trait Baz : Foo + Foo2 {
fn bar() -> Self::Bar;
// error: ambiguous associated type `Bar` in bounds of `Self`
}
This problem can be solved by specifying from which trait we want to use the Bar type:
trait Foo {
type Bar;
}
trait Foo2 {
type Bar;
}
trait Baz : Foo + Foo2 {
fn bar() -> <Self as Foo>::Bar; // ok!
}From rustc --explain E0411 (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
- E0408variable `y` is not bound in all patterns
- E0409variable `y` is bound inconsistently across alternatives separated by `|`
- E0415identifier `f` is bound more than once in this parameter list
- E0416identifier `x` is bound more than once in the same pattern
Up next
Often hit nextE0308: mismatched typesA related error from the same family.Read it next →Did this answer your question?