rust 带有&str的结构上的生存期声明错误

mi7gmzs6  于 2022-11-12  发布在  其他
关注(0)|答案(2)|浏览(262)

我有一个这样的结构体-

pub struct A {
    pub f: &str,
}

当我稍后尝试使用以下语句将&str值赋给该结构体时-

fn use(&self, t: &str){
       let a = A {
            f: self.t,
       };
}

我收到一个错误消息-

pub f: &str,
  |      ^ expected named lifetime parameter

然后,我将结构更改为使用命名的生存期参数-

pub struct A<'i> {
    pub f: &'i str,
}

但现在它给出了错误-

implicit elided lifetime not allowed here

note: assuming a `'static` lifetime...
help: indicate the anonymous lifetime

有人能解释一下第二个错误吗?我该如何修复它?

frebpwbc

frebpwbc1#

使用String而不是&str

pub struct A {
    pub f: String,
}

// use .to_string() to convert &str to String
fn use(&self, t: &str){
       let a = A {
            f: t.to_string(),
       };
}
s3fp2yjn

s3fp2yjn2#

在没有看到代码更完整的图片之前,很难说出到底是哪里出了问题,但你可能在impl上缺少了一个生存期说明符。例如,下面的代码将编译:

pub struct A<'a> {
    pub f: &'a str,
}

impl<'a> A<'a> {
    fn new(t: &'a str) -> Self {
        A {
             f: t,
        }
    }
}

fn main() {
    A::new("hi");
}

您需要为泛型生存期'a实现A,否则编译器将隐含与您的结构定义冲突的'static生存期。
然而,这在大多数情况下并不实用,您 * 可能 * 希望您的结构体使用String类型来保存字符串,而String类型对字符串拥有所有权,而不是引用。

相关问题