не может сделать вывод о подходящей продолжительности жизни для всей жизни

#rust

Вопрос:

У меня есть такая штука:

 type G2d<'a> = GfxGraphics<'a, Resources, CommandBuffer>;
 

Как включить его в качестве поля в структуру?

 pub struct Dc
{
  g : G2d,
  c : Context,
}
 

Но это дает:

 expected named lifetime parameter
 

Я пытался:

 
pub struct Dc
{
  g : amp;'a mut G2d<'a>,
  c : Context,
}

window.draw_2d( amp;event, | c, g, device |
{
  let mut dc = Dc { c, g };
});

 

Но это дает:

изображение|690x385

Я был бы признателен за любую помощь.

Ответ №1:

вся структура должна быть аннотирована временем жизни :

 pub struct Dc<'a>
{
  g : G2d<'a>,
  c : Context,
}
 

Комментарии:

1. Спасибо вам за ответ. Я попробовал то, что вы предложили, и старая ошибка больше не является проблемой, но у меня есть новая: drive.google.com/file/d/145Rib8DRhxd4_LB3iUKQ_hy8IDM7Hkt2/… Есть идеи, как это исправить?

Ответ №2:

Правильное решение-это

 pub struct Dc<'a, 'b>
{
  g : amp;'a mut G2d<'b>,
  c : Context,
}
 

Это логически неправильно, чтобы заимствование внешнего amp;mut было создано в тот же момент, когда была ссылка внутри G2d<‘a>. Таким образом, в выражении amp;’a mut G2d<‘a> эти обе жизни не могут означать, что они заимствуют одно и то же. Правильное решение-использовать несколько жизней.