Tôi đang gặp sự cố khi làm việc với các tham số suốt đời cho cấu trúc. Tôi không chắc chắn 100% làm thế nào để mô tả vấn đề, nhưng tôi đã tạo ra một trường hợp tầm thường cho thấy lỗi thời gian biên dịch của tôi.Lỗi thời gian tồn tại của thời gian tồn tại của bê tông nhưng tìm thấy giới hạn tuổi thọ
struct Ref;
struct Container<'a> {
r : &'a Ref
}
struct ContainerB<'a> {
c : Container<'a>
}
trait ToC {
fn to_c<'a>(&self, r : &'a Ref) -> Container<'a>;
}
impl<'a> ToC for ContainerB<'a> {
fn to_c(&self, r : &'a Ref) -> Container<'a> {
self.c
}
}
Các lỗi Tôi nhận được với điều này là
test.rs:16:3: 18:4 error: method `to_c` has an incompatible type for trait: expected concrete lifetime, but found bound lifetime parameter 'a
test.rs:16 fn to_c(&self, r : &'a Ref) -> Container<'a> {
test.rs:17 self.c
test.rs:18 }
test.rs:16:48: 18:4 note: expected concrete lifetime is the lifetime 'a as defined on the block at 16:47
test.rs:16 fn to_c(&self, r : &'a Ref) -> Container<'a> {
test.rs:17 self.c
test.rs:18 }
error: aborting due to previous error
Tôi đã thử nhiều biến thể và không thể có được điều này để biên dịch. Tôi tìm thấy một bài đăng khác ở đây (How to fix: expected concrete lifetime, but found bound lifetime parameter) nhưng dường như gặp phải vấn đề thay vì giải quyết nó. Tôi thực sự không thể hiểu tại sao vấn đề lại bắt nguồn. Tham chiếu & đang được chuyển qua các lần di chuyển để nó chỉ hoạt động đúng không?
Bất kỳ ý tưởng nào? Cảm ơn vì sự giúp đỡ.
Sửa lỗi khác sẽ là 'đặc điểm ToC <'a> {fn to_c (& self, r: & 'a Ref) -> Vùng chứa <'a>; } '. – huon
Ồ vâng, và sau đó 'impl <'a> ToC <'a> cho ContainerB <'a>'. –
Điều này chắc chắn sẽ giúp rất nhiều và cố định một số suy nghĩ sai lầm của tôi (ví dụ như bóng đời)! Cảm ơn. Điều này sửa chữa trường hợp này 100%, nhưng tôi dường như không thể áp dụng nó cho người khác. Tôi đã viết câu hỏi đó ở đây: http://stackoverflow.com/questions/24853111/rust-lifetime-error-expected-concrete-lifetime-part-2) – luke