如何修复错误“self”在创建引用self的新值时活不够长?

时间:2016-06-13 01:08:26

标签: rust

我在Rust工作,我在让所有权制度为我工作方面遇到了一些麻烦。当child创建parent时,我想为parent child提供引用。下面是我试图开始工作的代码:

struct Child<'a> {
    parent: &'a Parent,
}
impl<'a> Child<'a> {
    fn new(parent: &Parent) -> Child {
        Child { parent: &parent }
    }
}

struct Parent {
    child_count: u32,
}
impl Parent {
    fn new() -> Parent {
        Parent { child_count: 0 }
    }
    fn makeChild(&mut self) -> Child {
        self.child_count += 1;
        Child::new(&self)
    }
}

fn main() {
    let mut parent = Parent::new();
    let child = parent.makeChild();
}

但是,我一直收到以下错误:

src/main.rs:20:17: 20:21 error: `self` does not live long enough
src/main.rs:20     Child::new(&self)

1 个答案:

答案 0 :(得分:2)

self已经是一个引用,因为你将函数的参数声明为&mut self,因此你不需要引用它 - 只需直接使用self

impl Parent {
    fn new() -> Parent {
        Parent { child_count: 0 }
    }
    fn makeChild(&mut self) -> Child {
        self.child_count += 1;
        Child::new(self)
    }
}