我正在尝试编写“SFML 游戏开发”一书中的示例,但我对应该代表游戏世界的结构的生命周期有疑问。错误如下:
extern crate sfml;
use self::sfml::window::*;
use self::sfml::graphics::*;
pub struct Game<'s> {
mWindow: RenderWindow,
mPlayer: &'s CircleShape,
}
错误信息:
error[E0106]: missing lifetime specifier
--> src/game.rs:8:18
|
8 | mPlayer: &'s CircleShape,
| ^^^^^^^^^^^ expected lifetime parameter
我给了它,它为什么要一辈子?
最佳答案
Why is it asking for a lifetime if I have given it one?
因为你没有在需要它的地方给它生命周期。仔细查看错误消息。它告诉您 CircleShape
没有生命周期,而不是对 CircleShape
的引用(尽管这也是必需的)。
回顾CircleShape
的定义:
pub struct CircleShape<'s> { /* fields omitted */ }
它已经被生命周期参数化了,所以你需要提供一个:
pub struct Game<'s> {
mWindow: RenderWindow,
mPlayer: &'s CircleShape<'s>,
}
对于你的情况,这是否正确,我不能说,但它应该编译。
关于rust - 当给出生命周期时,编译器在结构中询问生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43712228/