EliasFarhan / NekoEngine

Generic 3d engine based on SDL2 and OpenGL ES 3/WebGL2
13 stars 5 forks source link

Impossible de rétrécir un vecteur? (ex: Vec3 -> Vec2) #11

Closed CanasSimon closed 4 years ago

CanasSimon commented 4 years ago

J'ai voulu ajouter des constructeurs pour convertir les différents vecteur entre eux mais pour une certaine raison j'arrive à les agrandir mais pas à les rétrécir (Vec2 -> Vec3, Vec3 -/> Vec2)

Voici mon constructeur pour Vec2 -> Vec3

template<typename U>
explicit Vec3(const Vec2<U>& vec2)
        : x(static_cast<T>(vec2.x)),
          y(static_cast<T>(vec2.y)),
          z(static_cast<T>(0))
{
}

Et pour Vec3 -> Vec2

template<typename U>
explicit Vec2(const Vec3<U>& vec3)
        : x(static_cast<T>(vec3.x)),
          y(static_cast<T>(vec3.y))
{
}

L'erreur

/home/frousties/Repos/NekoEngine/test/test_vector.cpp:12:17: error: no viable conversion from 'neko::Vec2f' (aka 'Vec2<float>') to 'neko::Vec3f' (aka 'Vec3<float>')
    neko::Vec3f vec2 = vec;
                ^      ~~~
/home/frousties/Repos/NekoEngine/core/include/mathematics/vector.h:305:7: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'neko::Vec2f' (aka 'Vec2<float>') to 'const neko::Vec3<float> &' for 1st argument
class Vec3
      ^
/home/frousties/Repos/NekoEngine/core/include/mathematics/vector.h:305:7: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'neko::Vec2f' (aka 'Vec2<float>') to 'neko::Vec3<float> &&' for 1st argument
1 error generated.
make[3]: *** [test/CMakeFiles/Neko_TEST.dir/build.make:154: test/CMakeFiles/Neko_TEST.dir/test_vector.cpp.o] Error 1
make[3]: *** Waiting for unfinished jobs....
make[2]: *** [CMakeFiles/Makefile2:552: test/CMakeFiles/Neko_TEST.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:559: test/CMakeFiles/Neko_TEST.dir/rule] Error 2
make: *** [Makefile:305: Neko_TEST] Error 2
EliasFarhan commented 4 years ago

Devines ce que veut dire explicit ;) C'est que tu peux pas faire une conversion implicite ;) Ce que t'essaies de faire ;) En gros, il faut que t'écrives: Vec3f v3 = Vec3f(v2); //v2 est un Vec2f

CanasSimon commented 4 years ago

Facepalm