Форум программистов, компьютерный форум, киберфорум
Rust
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 21.06.2018
Сообщений: 47
1

Rust ошибка E0623

14.07.2019, 11:35. Показов 1565. Ответов 12
Метки rust (Все метки)

при компиляции появляется ошибка E0623 в документации этот номер пропущен. в чём может быть проблема?
ошибка:
Код
error[E0623]: lifetime mismatch
  --> src\main.rs:51:11
   |
48 | fn load(scene:&mut Scene){
   |               ----------
   |               |
   |               these two types are declared with different lifetimes...
...
51 |     scene.create_object(data,None);
   |           ^^^^^^^^^^^^^ ...but data from `scene` flows into `scene` here
код:
Код
use std::sync::mpsc;
use std::sync::mpsc::{Sender,Receiver};
use std::any::Any;

trait Controller{
    fn update(&mut self,data: &mut ObjectData);
}

struct ObjectData<'a>{
    resources: &'a Vec<Box<Any>>,
    scene_event: Sender<fn(&mut Scene)>
}

struct Object<'a>{
    data: ObjectData<'a>,
    controller: Option<Box<Controller>>
}

struct Scene<'a>{
    object: Vec<Object<'a>>,
    rx: Receiver<fn(&mut Scene)>,
    tx: Sender<fn(&mut Scene)>,
    resources: Vec<Box<Any>>
}

impl<'a> Scene<'a> {
    fn new(loader: fn(scene: &mut Scene) ) -> Scene<'a>{
        let (tx,rx):(Sender<fn(&mut Scene)>,Receiver<fn(&mut Scene)>)= mpsc::channel();
        let mut scene = Scene{object: Vec::new(),rx,tx,resources: Vec::new()};
        loader(&mut scene);
        scene
    }

    fn create_object(&mut self,data: ObjectData<'a>,controller: Option<Box<Controller>>){
        self.object.push(Object{data,controller})
    }

    fn new_objectData(&self)-> ObjectData{
        ObjectData{resources: &self.resources,scene_event: self.tx.clone()}
    }
}

fn main() {
    let mut scene = Scene::new(load);

}

fn load(scene:&mut Scene){

    let data = scene.new_objectData();
    scene.create_object(data,None);
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.07.2019, 11:35
Ответы с готовыми решениями:

[Rust] Обсуждение возможностей и предстоящей роли языка Rust
Psilon, чем он тебя так привлек? И почему именно &quot;убийца плюсов&quot;? Если напишешь развернутый ответ,...

[Rust] Как привязывать WinAPI-функции к коду на Rust?
Может кто-нить дать код, КАК привязывать вин апишные функции к растовскому коду (на примере...

[Rust] Расскажите о своём опыте программирования на Rust
Доброе утро! Расскажите, пожалуйста, о своём опыте программирования на Rust. Можно в сравнении с...

[Rust] Time
Подскажите как узнать время в Rust. //Rust extern crate time; fn main() { let now =...

__________________
12
4135 / 2713 / 388
Регистрация: 01.06.2013
Сообщений: 5,713
Записей в блоге: 9
14.07.2019, 21:08 2
Я давненько смотрел rust, но предположу что, коли Scene - обобщённый тип (generic), то должен как то стать известен конкретный тип его параметра 'a при использовании, но он не задан.
0
Фрилансер
3681 / 2052 / 565
Регистрация: 31.05.2009
Сообщений: 6,684
15.07.2019, 14:52 3
Murloc_Knight, это сообщение - модифицированный вариант E0312
error[E0312]: lifetime of reference outlives lifetime of borrowed content
Что-то у Вас напутано с lifetime, а разбираться в коде с нуля лень..

Цитата Сообщение от Curry Посмотреть сообщение
конкретный тип его параметра 'a
Это не тип, это lifetime
1
4135 / 2713 / 388
Регистрация: 01.06.2013
Сообщений: 5,713
Записей в блоге: 9
15.07.2019, 16:10 4
Цитата Сообщение от Black Fregat Посмотреть сообщение
Это не тип, это lifetime
Вижу. Но в исходнике тип-параметр дженериков нигде не указан, так что тут есть ошибка, а после исправления её уже дальше смотреть.
0
1 / 1 / 0
Регистрация: 21.06.2018
Сообщений: 47
16.07.2019, 08:38  [ТС] 5
на более простом примере понял что эта ошибка появляется когда получаешь указатель на перменую в структуре в которую его и сохраняешь.
Код
struct Boo<'a> {
    b: &'a i32
}

struct Re<'a> {
    a: Vec<Boo<'a>>,
    b: i32
}

fn main() {
    let mut r = Re{a:Vec::new(),b:10};
    add(&mut r);
}

fn add(r: & mut Re){
    r.a.push(Boo { b: &r.b });
}
в данном случае обозначение времени жизни в методе исправляет ошибку
Код
fn add<'a>(r: &'a mut Re<'a>)
но в предыдущем коде добавление времени жизни не исправило проблему
Код
    fn create_object<'b>(&'b mut self,data: ObjectData<'a>,controller: Option<Box<Controller>>){
        self.object.push(Object{data,controller})
    }
в чём проблема?
0
4135 / 2713 / 388
Регистрация: 01.06.2013
Сообщений: 5,713
Записей в блоге: 9
16.07.2019, 14:37 6
Цитата Сообщение от Murloc_Knight Посмотреть сообщение
в предыдущем коде добавление времени жизни не исправило проблему
Сами то можете сказать, какой тип подставляется вместо 'a в Scene::new(load) ?
0
1 / 1 / 0
Регистрация: 21.06.2018
Сообщений: 47
16.07.2019, 16:12  [ТС] 7
в смысле? в Scene::new передаётся функция которая потом вызывается. 'a это время жизни а не тип. и проблема в методе create_object
1
4135 / 2713 / 388
Регистрация: 01.06.2013
Сообщений: 5,713
Записей в блоге: 9
16.07.2019, 17:05 8
Black Fregat, Murloc_Knight, пардон. rust смотрел давно, забыл уже.
0
4135 / 2713 / 388
Регистрация: 01.06.2013
Сообщений: 5,713
Записей в блоге: 9
17.07.2019, 00:28 9
Что смущает с самого начала, так сообщение
these two types are declared with different lifetimes...
Какие эти два типа, когда указан только один тип?
https://github.com/rust-lang/rust/issues/59842
0
Фрилансер
3681 / 2052 / 565
Регистрация: 31.05.2009
Сообщений: 6,684
17.07.2019, 07:40 10
Это к нам вопрос? Или к разработчикам компилятора? Про некоторую невнятность этого сообщения в интернете много написано
0
4135 / 2713 / 388
Регистрация: 01.06.2013
Сообщений: 5,713
Записей в блоге: 9
17.07.2019, 10:29 11
Цитата Сообщение от Black Fregat Посмотреть сообщение
Это к нам вопрос? Или к разработчикам компилятора?
Вряд ли здесь есть разработчики компилятора. Это предположение, что и в данном случае это баг компилятора.
0
1 / 1 / 0
Регистрация: 21.06.2018
Сообщений: 47
17.07.2019, 12:20  [ТС] 12
возможно имеется в виду что одно из времён жизни обозначено явно а второе нет. но в каком месте его нужно обозначить я не понимаю.
0
61 / 46 / 1
Регистрация: 25.06.2015
Сообщений: 78
18.07.2019, 10:30 13
В приведенном коде с лайфтаймами, очевидно, бардак, да и код не соответствует сообщению об ошибке. Попробуйте для начала переписать без лайфтаймов. Может быть, в этом случае они и не нужны вовсе.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.07.2019, 10:30

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Rust+assembler
Как связать язык rust и ассемблер не используя ассемблерные вставки(неудобно использовать их в...

Есть ли у rust будущее?
Вот вчера общался с 1 товарищем на тему перспектив С++, он меня убеждает что язык скоро будет...

Frontend Для RUST
Нужна помощь! Есть класс Participant, в этом классе есть функция new. impl Participant { ///...

Неполная нагрузка в RUST
Здравствуйте. Проблема такова: в игре Rust видеокарта gigabyte gtx 1060 6gb не нагружается даже...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.