Чтобы узнать о Rust, я создаю свой класс Matrix. Моя реализация оных черта заключается в следующем:Несоответствующие типы при реализации признака
impl<T: Add> Add for Matrix<T>
{
type Output = Matrix<T>;
fn add(self, _rhs: Matrix<T>) -> Matrix<T>
{
assert!(self.rows == _rhs.rows && self.cols == _rhs.cols,
"attempting to add matrices of different sizes");
let mut res: Matrix<T> = Matrix::<T>{
rows: self.rows,
cols: self.cols,
data : Vec::<T>::with_capacity(self.rows * self.cols),
};
for i in 0..self.rows*self.cols{
res.data.push(self.data[i] + _rhs.data[i]);
}
res
}
}
но я получаю следующую ошибку
Compiling matrix v0.1.0 (file://~/soft/rust/projects/matrix)
src/lib.rs:35:27: 35:54 error: mismatched types:
expected `T`,
found `<T as core::ops::Add>::Output`
(expected type parameter,
found associated type) [E0308]
src/lib.rs:35 res.data.push(self.data[i] + _rhs.data[i]);
^~~~~~~~~~~~~~~~~~~~~~~~~~~
Идя отчет об ошибке, я думаю, что мне нужно, чтобы указать, где-то еще, что T реализует Добавить но в любом месте я пытаюсь это сделать, либо получаю ту же ошибку или ошибку синтаксического анализа.
Мое определение матрицы кстати
pub struct Matrix<T> {
pub rows: usize,
pub cols: usize,
pub data: Vec<T>,
}
Спасибо. Я понимаю, что нужно указать, что тип вывода также является T, но я, очевидно, еще не полностью владею правами на grokked. Требуется больше исследований ... – tomsgd