2016-08-24 2 views
1

이것은 내 코드의 모양입니다. 내 ShapeRenderer 구조체 내에 함축 된 구조체를 사용하여 해당 메서드를 사용하려고합니다.struct 필드 객체 유형을 선언 할 때 어떤 종류의 평생 매개 변수를 사용해야합니까?

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

네가 맞다. CanvasRenderer를 참조로 제공하는 대신 ShapeRenderer에 직접 인스 턴싱해야한다. 구현에 도달했을 때 나는 그것을 깨달았다 고 생각합니다. 하지만 먼저 테스트를 해보니 - 아직 멀었습니다;) 항상 감사드립니다. – xetra11

관련 문제