本文介绍了声明结构字段对象类型时,必须在此处使用哪种寿命参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的代码的样子.我正在尝试在我的ShapeRenderer结构中使用隐式结构并使用其方法.

This is what my code looks like. I'm trying to use a impled struct within my ShapeRenderer struct and use its methods.

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>-这些尝试都没有解决问题.

I marked it with a lifetime parameter - why does it want another one? tried the object type with <'a> and appended it <'a> - neither of those attempts solved the problem.

推荐答案

CanvasRenderer在整个生命周期中都已参数化,因此您需要说明该生命周期是什么:

CanvasRenderer is parameterized over a lifetime, so you need to state what that lifetime is:

pub struct ShapeRenderer<'a> {
    core_renderer: &'a mut CanvasRenderer<'a>,
    //                                   ^^^^
}

但是,这种结构似乎没有太大的用途,它仅增加了间接性.为什么要引用仅具有引用的事物?跳过中间人:

However, this structure doesn't seem to have much purpose, it only adds indirection. Why have a reference to a thing that only has a reference? Skip the middleman:

pub struct ShapeRenderer<'a> {
    core_renderer: CanvasRenderer<'a>,
}

这篇关于声明结构字段对象类型时,必须在此处使用哪种寿命参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-27 15:09
查看更多