Hello!
I will be as brief as possible with this example.
I have one World with 2 fields: Levels and Players
pub struct World<'a>{
levels: Vec<Level<'a>>,
players: Vec<Player>
}
In the Levels, I have Platforms and the Players that are in the current level
pub struct Level<'a> {
platforms: Vec<Platform>,
players: Vec<&'a Player>
}
So, imagine when I start the game I want to pass all players reference from World to level 1 and if one player finish level 1 pass the reference to level2.
My code:
impl<'a> World <'a>{
pub fn new() -> World <'a>{
World{
levels: vec![],
players: vec![],
}
}
pub fn new_player(&mut self, id: u32, name: String){
let player = Player::new(id, name);
self.players.push(player);
}
pub fn new_level(&mut self) -> &mut Level<'a>{
let level = Level::new();
self.levels.push(level);
self.levels.get_mut(self.levels.len() - 1).unwrap()
}
pub fn start(&mut self){
let level = self.new_level();
for player in &self.players{
level.add_player(player);
}
}
}
impl<'a> Level <'a>{
pub fn new() -> Self{
Level {
platforms: vec![],
players: vec![]
}
}
pub fn add_player(&mut self, player: &'a Player){
self.players.push(player);
}
}
My error is in function start at &self.players: cannot infer an appropriate lifetime for borrow expression due to conflicting requirements