Hello,
during my implementation of struct for one of advent of code tasks I have encountered for following error:
> error[E0061]: this function takes 3 parameters but 2 parameters were supplied
> --> src/Computer.rs:71:44
> |
> 65 | fn add(&self, num_1_pos: usize, num_2_pos: usize) -> i32 { self.intcode.get_value_from_pos(num_1_pos) + self.intcode.get_value_from_pos(num_2_pos) }
> | -------------------------------------------------------- defined here
> ...
> 71 | 1 => self.intcode.set_value_at_pos(Self::add(num_1_pos as usize, num_2_pos as usize), target_pos as usize),
> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected 3 parameters
Error occured for following struct implementation:
impl Computer {
pub fn init_with_intcode(intcode: Intcode) -> Computer {
Computer {
intcode: intcode,
}
}
fn add(&self, num_1_pos: usize, num_2_pos: usize) -> i32 { self.intcode.get_value_from_pos(num_1_pos) + self.intcode.get_value_from_pos(num_2_pos) }
fn multiply(&self, num_1_pos: usize, num_2_pos: usize) -> i32 { self.intcode.get_value_from_pos(num_1_pos) * self.intcode.get_value_from_pos(num_2_pos) }
pub fn calculate(&mut self) -> Option<&mut Intcode> {
while let Some((opcode, num_1_pos, num_2_pos, target_pos)) = self.intcode.next() {
match opcode {
1 => self.intcode.set_value_at_pos(Self::add(num_1_pos as usize, num_2_pos as usize), target_pos as usize),
2 => self.intcode.set_value_at_pos(Self::multiply(num_1_pos as usize, num_2_pos as usize), target_pos as usize),
99 => {
println!("Encountered opcode of 99. Finishing computations...");
break;
}
_ => { panic!("Unexpected opcode value"); }
}
}
Some(&mut self.intcode)
}
}
Problem seems to be that '&self' in both add and multiply functions definitions seems to be treated as 'normal' parameter and therefore i have to provide 'self' as first parameter during invocation to make it work.
Could anyone please tell me why does it happen? I don't understand why both functions interpret '&self' like that and force me to pass it during invocation?
Regards!