Новичок
Профиль
Группа: Участник
Сообщений: 2
Регистрация: 20.5.2011
Репутация: нет Всего: нет
|
Есть структура: Код | struct fVec3 { union { struct { float x, y, z; }; struct { float r, g, b; }; float v[3]; }; WCS_GEOMETRY_BASIC_CONSTRUCTORS3(fVec3, float) };
|
Есть макрос, изначально тут было много темплейтов, убрал для наглядности, расписав все вручную: Код | #define WCS_GEOMETRY_BASIC_CONSTRUCTORS3(STRUCT, TYPE) STRUCT() : x(0), y(0), z(0) {} \ \ STRUCT(char i) : x((TYPE)i), y((TYPE)i), z((TYPE)i) {} \ STRUCT(float i) : x((TYPE)i), y((TYPE)i), z((TYPE)i) {} \ STRUCT(int i) : x((TYPE)i), y((TYPE)i), z((TYPE)i) {} \ STRUCT(uchar i) : x((TYPE)i), y((TYPE)i), z((TYPE)i) {} \ STRUCT(uint i) : x((TYPE)i), y((TYPE)i), z((TYPE)i) {} \ \ explicit STRUCT(char x, char y, char z) : x((TYPE)x), y((TYPE)y), z((TYPE)z) {} \ explicit STRUCT(float x, float y, float z) : x((TYPE)x), y((TYPE)y), z((TYPE)z) {} \ explicit STRUCT(int x, int y, int z) : x((TYPE)x), y((TYPE)y), z((TYPE)z) {} \ explicit STRUCT(uchar x, uchar y, uchar z) : x((TYPE)x), y((TYPE)y), z((TYPE)z) {} \ explicit STRUCT(uint x, uint y, uint z) : x((TYPE)x), y((TYPE)y), z((TYPE)z) {} \ \ explicit STRUCT(char *v) : x((TYPE)v[0]), y((TYPE)v[1]), z((TYPE)v[2]) {} \ explicit STRUCT(float *v) : x((TYPE)v[0]), y((TYPE)v[1]), z((TYPE)v[2]) {} \ explicit STRUCT(int *v) : x((TYPE)v[0]), y((TYPE)v[1]), z((TYPE)v[2]) {} \ explicit STRUCT(uchar *v) : x((TYPE)v[0]), y((TYPE)v[1]), z((TYPE)v[2]) {} \ explicit STRUCT(uint *v) : x((TYPE)v[0]), y((TYPE)v[1]), z((TYPE)v[2]) {} \ \ explicit STRUCT(const cVec2 &v); \ explicit STRUCT(const fVec2 &v); \ explicit STRUCT(const iVec2 &v); \ explicit STRUCT(const ucVec2 &v); \ explicit STRUCT(const uiVec2 &v); \ \ explicit STRUCT(const cVec3 &v); \ explicit STRUCT(const fVec3 &v); \ explicit STRUCT(const iVec3 &v); \ explicit STRUCT(const ucVec3 &v); \ explicit STRUCT(const uiVec3 &v); \ \ explicit STRUCT(const cVec4 &v); \ explicit STRUCT(const fVec4 &v); \ explicit STRUCT(const iVec4 &v); \ explicit STRUCT(const ucVec4 &v); \ explicit STRUCT(const uiVec4 &v);
|
При попытке использовать структуру (float насильно уже указываю от паники): Код | return fVec3( float(x*(2.0f/255.0f)-1.0f), float(y*(2.0f/255.0f)-1.0f), float(0.0f) );
|
Получаю отлуп от компилятора: Код | M:\WCS\_libWCS\src/Types/Geometry/cVec2.h: In member function 'WCS::fVec3 WCS::cVec2::toFVec3() const': M:\WCS\_libWCS\src/Types/Geometry/cVec2.h:69:45: error: no matching function for call to 'WCS::fVec3::fVec3(WCS::fVec3)' M:\WCS\_libWCS\src/Types/Geometry/fVec3.h:31:9: note: candidates are: WCS::fVec3::fVec3(uint, uint, uint) M:\WCS\_libWCS\src/Types/Geometry/fVec3.h:31:9: note: WCS::fVec3::fVec3(uchar, uchar, uchar) M:\WCS\_libWCS\src/Types/Geometry/fVec3.h:31:9: note: WCS::fVec3::fVec3(int, int, int) M:\WCS\_libWCS\src/Types/Geometry/fVec3.h:31:9: note: WCS::fVec3::fVec3(float, float, float) M:\WCS\_libWCS\src/Types/Geometry/fVec3.h:31:9: note: WCS::fVec3::fVec3(char, char, char) M:\WCS\_libWCS\src/Types/Geometry/fVec3.h:31:9: note: WCS::fVec3::fVec3(uint) M:\WCS\_libWCS\src/Types/Geometry/fVec3.h:31:9: note: WCS::fVec3::fVec3(uchar) M:\WCS\_libWCS\src/Types/Geometry/fVec3.h:31:9: note: WCS::fVec3::fVec3(int) M:\WCS\_libWCS\src/Types/Geometry/fVec3.h:31:9: note: WCS::fVec3::fVec3(float) M:\WCS\_libWCS\src/Types/Geometry/fVec3.h:31:9: note: WCS::fVec3::fVec3(char) M:\WCS\_libWCS\src/Types/Geometry/fVec3.h:31:9: note: WCS::fVec3::fVec3()
|
Поставте, плз, диагноз - в чем заключается мой идиотизм?Вот такой вариант собирается (хз, будет ли фактически работать, но при сборке проблем нет): Код | fVec2 cVec2::toFVec() const { return fVec2(x*(2.0f/255.0f)-1.0f, y*(2.0f/255.0f)-1.0f); }
|
структура, аналогичная fVec3, а конструкторы такие: Код | #define WCS_GEOMETRY_BASIC_CONSTRUCTORS2(STRUCT, TYPE) STRUCT() : x(0), y(0) {} \ \ STRUCT(char i) : x((TYPE)i), y((TYPE)i) {} \ STRUCT(float i) : x((TYPE)i), y((TYPE)i) {} \ STRUCT(int i) : x((TYPE)i), y((TYPE)i) {} \ STRUCT(uchar i) : x((TYPE)i), y((TYPE)i) {} \ STRUCT(uint i) : x((TYPE)i), y((TYPE)i) {} \ \ template <typename T1, typename T2> explicit STRUCT(T1 x, T2 y) : x((TYPE)x), y((TYPE)y) {} \ \ explicit STRUCT(char *v) : x((TYPE)v[0]), y((TYPE)v[1]) {} \ explicit STRUCT(float *v) : x((TYPE)v[0]), y((TYPE)v[1]) {} \ explicit STRUCT(int *v) : x((TYPE)v[0]), y((TYPE)v[1]) {} \ explicit STRUCT(uchar *v) : x((TYPE)v[0]), y((TYPE)v[1]) {} \ explicit STRUCT(uint *v) : x((TYPE)v[0]), y((TYPE)v[1]) {} \ \ template <typename T> explicit STRUCT(const T &v) : x((TYPE)v.x), y((TYPE)v.y) {}
|
ЗЫ: Пардон, не гсс, а г++ Это сообщение отредактировал(а) Snape - 20.5.2011, 23:48
|