cgmath icon indicating copy to clipboard operation
cgmath copied to clipboard

error: multiple one found

Open jcyongqin opened this issue 7 years ago • 3 comments

error[E0034]: multiple applicable items in scope --> hello_gl\src\main.rs:29:16 | 29 | let tran = Matrix4::one(); | ^^^^^^^^^^^^ multiple one found | = note: candidate #1 is defined in an impl of the trait cgmath::One for the type cgmath::Matrix4<_> = note: candidate #2 is defined in an impl of the trait cgmath::Transform for the type cgmath::Matrix4<_>

code:

use cgmath::prelude::*;
use cgmath::{Vector4, Matrix4};

    let vec = m::vec3::<f32>(1.0, 0.0, 0.0);
    let tran = Matrix4::<f32>::one();
    let vec = tran.transform_vector(vec);
    println!("{:?}", &vec);

jcyongqin avatar Aug 02 '18 12:08 jcyongqin

What would be the best way to resolve this, remove ::one() from Transform?

Rhuagh avatar Sep 14 '18 13:09 Rhuagh

Given that there is One trait, we should rename Transform::one to something more unique. identity() is already provided for SquareMatrix trait, which would conflict with Transform for matrices... Maybe Transform should just derive from One and re-use it's one() method instead of adding one for itself? There appears to be quite an overlap between traits (speaking of #419 ...).

kvark avatar Sep 14 '18 13:09 kvark

I would suggest making Transform depend on One and then removing the one() method from Transform.

faulesocke avatar Jul 11 '19 13:07 faulesocke