Rust 将结构铸造到特性,获得寿命“;无法为生存期参数`';a“由于要求冲突”; trait-BT{ fn获取a(&self)->&a; } #[导出(调试)] 结构A{ v:i32, } 暗示{ fn nb(和自身)->框{ Box::new(B{a:self}) } } #[导出(调试)] 结构B{ fn获取a(&self)->&a{ 回归自我; } } fn main(){ println!(“{:?}”,A{v:32}.nb().get_A()); }

Rust 将结构铸造到特性,获得寿命“;无法为生存期参数`';a“由于要求冲突”; trait-BT{ fn获取a(&self)->&a; } #[导出(调试)] 结构A{ v:i32, } 暗示{ fn nb(和自身)->框{ Box::new(B{a:self}) } } #[导出(调试)] 结构B{ fn获取a(&self)->&a{ 回归自我; } } fn main(){ println!(“{:?}”,A{v:32}.nb().get_A()); },rust,Rust,A有一个方法生成一个引用为A的B实例,而B可能有许多方法访问B.A(A在B中的引用)。如果让A.nb()返回B而不是BT,则代码将正常工作 我是新手。这个问题整天困扰着我。我应该怎么做才能使代码正常工作?谢谢 整个错误报告: error[E0495]:由于需求冲突,无法为生存期参数“%a”推断适当的生存期 -->src\socket\msg\message.rs:53:26 | 53 | Box::new(B{a:self}) | ^ | 注意:

A
有一个方法生成一个引用为
A
B
实例,而
B
可能有许多方法访问
B.A
(A在B中的引用)。如果让
A.nb()
返回
B
而不是
BT
,则代码将正常工作

我是新手。这个问题整天困扰着我。我应该怎么做才能使代码正常工作?谢谢

整个错误报告:

error[E0495]:由于需求冲突,无法为生存期参数“%a”推断适当的生存期
-->src\socket\msg\message.rs:53:26
|
53 | Box::new(B{a:self})
|                          ^
|
注意:首先,生命周期不能超过在52:13在方法体上定义的匿名生命周期#1。。。
-->src\socket\msg\message.rs:52:13
|
52 |/fn nb(&self)->框{
53 | | Box::new(B{a:self})
54 | |             }
| |_____________^
注意:…这样引用就不会超过借用的内容
-->src\socket\msg\message.rs:53:31
|
53 | Box::new(B{a:self})
|                               ^^^^
=注意:但是,生存期必须对静态生存期有效。。。
=注意:…因此表达式是可赋值的:

预期std::boxed::Boxtrait对象的默认生存期是静态的
。您需要向
nb()
函数返回的trait对象添加显式生存期绑定:

impl A {
    fn nb<'s>(&'s self) -> Box<BT+'s> {
        Box::new(B{a: self})
    }
}
impl A{
fn nb盒