rust - 当给出生命周期时,编译器在结构中询问生命周期

标签 rust lifetime

我正在尝试编写“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/

相关文章:

multithreading - 如何在线程之间共享非发送对象?

c - 如何在 Rust 中创建静态库以链接到 Windows 中的 C 代码?

rust - 带有产生流的异步fn的此通用结构遇到麻烦

rust - 引用“静态生命周期不长?

rust - 如何从函数返回反转的字符串?

scope - "does not live long enough"创建可在线程间传递的引用二叉树时

iterator - 如何编写返回对自身的引用的迭代器?

postgresql - 使用 Rust Diesel 插入记录时处理 ID 的最佳方法是什么

c - "static"变量的这个定义是错误的、误导性的还是两者都不是?

error-handling - 如何捕获 Rust 的 swap_with_slice() vec 方法是否发生错误?