| An undeclared lifetime was used. | |
| Erroneous code example: | |
| ```compile_fail,E0261 | |
| // error, use of undeclared lifetime name `'a` | |
| fn foo(x: &'a str) { } | |
| struct Foo { | |
| // error, use of undeclared lifetime name `'a` | |
| x: &'a str, | |
| } | |
| ``` | |
| These can be fixed by declaring lifetime parameters: | |
| ``` | |
| struct Foo<'a> { | |
| x: &'a str, | |
| } | |
| fn foo<'a>(x: &'a str) {} | |
| ``` | |
| Impl blocks declare lifetime parameters separately. You need to add lifetime | |
| parameters to an impl block if you're implementing a type that has a lifetime | |
| parameter of its own. | |
| For example: | |
| ```compile_fail,E0261 | |
| struct Foo<'a> { | |
| x: &'a str, | |
| } | |
| // error, use of undeclared lifetime name `'a` | |
| impl Foo<'a> { | |
| fn foo<'a>(x: &'a str) {} | |
| } | |
| ``` | |
| This is fixed by declaring the impl block like this: | |
| ``` | |
| struct Foo<'a> { | |
| x: &'a str, | |
| } | |
| // correct | |
| impl<'a> Foo<'a> { | |
| fn foo(x: &'a str) {} | |
| } | |
| ``` |