Ни один оператор "*" не соответствует этим операндам

Это мой код

glm::vec3 v(4, -6, 7);

glm::vec3 twiceV = 2 * v;

Я включил GLM Stable и экспериментальные GLM расширения. Почему я не могу использовать int * vec?

2 ответа

Это потому, что нет глобального перегруженного оператора формы

glm::vec3 operator*(int, const glm::vec3&)

Есть ли v * 2 работать случайно? (Для этого будет достаточно перегрузки оператора функции-члена.)

Или, может быть, даже 2f * v, что тогда потребовало бы первый параметр перегруженного * оператор быть float?

2 является целым числом, в то время как элементы glm::vec3 являются поплавками. Попробуйте это вместо этого:

glm::vec3 twiceV = 2.0f * v;

Я бы также передал значения с плавающей точкой в ​​конструктор (4.0f), просто чтобы четко указать, что вы имеете дело с поплавками.

Кроме того, вы можете использовать целочисленный вектор glm::ivec3:

glm::ivec3 v(4, -6, 7);
glm::ivec3 twiceV = 2 * v;

Конечно, целочисленный вектор будет содержать только целочисленные значения, которые могут не соответствовать вашим ожиданиям.

Другие вопросы по тегам