这就是我的代码。我正在尝试在ShapeRenderer
结构中使用一个implementsd结构并使用它的方法。
shapes.rs:
use super::core::*;
pub struct ShapeRenderer<'a> {
core_renderer: &'a mut CanvasRenderer,
}
core.rs
pub struct Canvas {
pub width: usize,
pub height: usize,
pub array: Vec<char>,
}
pub struct Point {
pub x: usize,
pub y: usize,
}
pub struct CanvasRenderer<'a> {
canvas: &'a mut Canvas,
}
impl<'a> CanvasRenderer<'a> {
pub fn new(canvas: &'a mut Canvas) -> CanvasRenderer {
CanvasRenderer { canvas: canvas }
}
}
错误 的
error[E0107]: wrong number of lifetime parameters: expected 1, found 0
--> src/shapes.rs:5:28
|
5 | core_renderer: &'a mut CanvasRenderer
| ^^^^^^^^^^^^^^ expected 1 lifetime parameter
我用一个生命周期参数标记它 - 为什么它需要另一个?尝试使用<'a>
对象类型并附加<'a>
- 这些尝试都没有解决问题。
答案 0 :(得分:4)
CanvasRenderer
在生命周期内进行参数化,因此您需要说明生命周期是什么:
pub struct ShapeRenderer<'a> {
core_renderer: &'a mut CanvasRenderer<'a>,
// ^^^^
}
然而,这种结构似乎没有多大用处,它只增加了间接性。为什么要引用只有引用的东西?跳过中间人:
pub struct ShapeRenderer<'a> {
core_renderer: CanvasRenderer<'a>,
}