Фон: я использую библиотеку nalgebra
, и я хочу создать структуру, представляющую многомерное нормальное распределение. M
- тип матрицы, например. Mat4<f64>
.«конфликтующие реализации для признака» при попытке генерировать
Моя текущая попытка выглядит следующим образом:
use std::ops::Mul;
use std::marker::PhantomData;
use nalgebra::*;
#[allow(non_snake_case)]
pub struct Multivar<N, V, M: SquareMat<N, V>> {
μ: V,
Σ: M,
marker: PhantomData<N>
}
impl<N, V, M> Mul<Multivar<N, V, M>> for M {
type Output = Multivar<N, V, M>;
fn mul(self, rhs: Multivar<N, V, M>) -> Multivar<N, V, M> {
Multivar {
μ: self * rhs.μ,
Σ: self * rhs.Σ * transpose(&self)
}
}
}
Однако компилятор жалуется:
error: type parameter `M` must be used as the type parameter for some local type (e.g. `MyStruct<T>`); only traits defined in the current crate can be implemented for a type parameter
и
error: conflicting implementations for trait `core::ops::Mul`
Я не верю в это должна быть ошибка s ince Я определяю реализацию для структуры, которую я определил в этом модуле. Как мне это исправить?
ли 'SquareMat' обеспечить тип для' n', 'V', так что вы можете сделать что-то вроде:' паба STRUCT Multivar> { μ: M :: V, Σ: M, Маркер: PhantomData } ' –
Jarod42
, пожалуйста, предоставьте [минимальный компилируемый и проверяемый пример] (http://stackoverflow.com/help/mcve), а главное, в вашем коде отсутствует символ SquareMat, а ваши сообщения об ошибках ссылаются на' MyStruct', который не показан нигде.Для Rust-questions это наиболее удобно для ответчиков, если ваша ошибка воспроизводится в Playpen на [play.rust-lang.org] (http://play.rust-lang.org) –
. Также рассмотрите существующие вопросы для обе ошибки ([1] (http://stackoverflow.com/search?q=%5Brust%5D+only+traits+defined+in+the+current+crate+can+be+implemented+for+a+type+ параметр), [2] (http://stackoverflow.com/search?q=%5Brust%5D+conflicting+implementations+for+trait)) и ** объясните нам **, почему ваш вопрос отличается. В противном случае вы можете просто быть отмечены как дубликаты, закрыты или получить бесполезный ответ. – Shepmaster