2016-08-24 55 views
1

這就是我的代碼的樣子。我正嘗試在我的ShapeRenderer結構中使用實現結構並使用它的方法。在聲明結構字段對象類型時,我必須使用什麼樣的生命週期參數

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> - 這些嘗試均未解決問題。

+5

您的設計看起來像您期望持有兩個mut引用到同一個畫布。無論如何這不會起作用。 –

+0

啊哇!好點 - 謝謝你指出了! – xetra11

回答

3

CanvasRenderer被參數化過一輩子,所以你需要指出的生存期是:

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

但是,這種結構似乎並沒有太多的目的,它只是增加了間接。爲什麼要參考一個只有參考的東西?跳過中間人:

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

你是對的我應該直接開始instanciate在ShapeRenderer ctor的CanvasRenderer而不是作爲參考。我認爲,當我開始實施時,我可能會意識到這一點。但是先做測試 - 那麼遠還沒有;)感謝你一如既往的幫助! – xetra11

相關問題