![](/img/trans.png)
[英]"Lifetime in struct : "this value requires that `'1` must outlive `'static`
[英]rust lifetime parameter must outlive the static lifetime
因此,我正在按照本教程构建一个 rogue-like,并且我决定开始使用 specs 调度程序来使注册和执行系统更容易一些。
为此,我在我的State
结构中添加了一个Dispatcher
:
use rltk::{GameState, Rltk};
use specs::world::World;
use specs::Dispatcher;
pub struct State<'a, 'b> { // <-- Added new lifetime params here for dispacher
pub ecs: World,
pub dsp: Dispatcher<'a, 'b>,
}
但是当我尝试为其实现GameSate
特征时,我遇到了问题:
impl<'a, 'b> GameState for State<'a, 'b> {
fn tick(&mut self, ctx: &mut Rltk) {
ctx.cls();
self.dsp.dispatch(&mut self.ecs);
self.ecs.maintain();
}
}
我收到这些错误:
error[E0478]: lifetime bound not satisfied
--> src/sys/state.rs:96:14
|
96 | impl<'a, 'b> GameState for State<'a, 'b> {
| ^^^^^^^^^
|
note: lifetime parameter instantiated with the lifetime `'a` as defined on the impl at 96:6
--> src/sys/state.rs:96:6
|
96 | impl<'a, 'b> GameState for State<'a, 'b> {
| ^^
= note: but lifetime parameter must outlive the static lifetime
error[E0478]: lifetime bound not satisfied
--> src/sys/state.rs:96:14
|
96 | impl<'a, 'b> GameState for State<'a, 'b> {
| ^^^^^^^^^
|
note: lifetime parameter instantiated with the lifetime `'b` as defined on the impl at 96:10
--> src/sys/state.rs:96:10
|
96 | impl<'a, 'b> GameState for State<'a, 'b> {
| ^^
= note: but lifetime parameter must outlive the static lifetime
它希望'a, 'b
的生命周期超过'static
,这听起来不可能,因为我确信'static
是整个程序的生命周期。
我该如何解决这个问题?
GameState
要求实现者必须是'static
:
pub trait GameState: 'static {...}
为了满足'static
生命周期,您的类型不得包含任何短于'static
引用。 因此,如果您不能将'a
和'b
都设为'static
,那么唯一的选择就是不要将Dispatcher
放入State
中。
对于生命周期'a
“比'static
寿命更长”意味着'a
必须等于或长于'static
(是的, 'static
是可能的最长生命周期)。 类似错误的 Rust 问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.