【问题标题】:No operator "*" matches these operands没有运算符“*”与这些操作数匹配
【发布时间】:2017-02-03 15:48:43
【问题描述】:

这是我的代码

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

glm::vec3 twiceV = 2 * v;

我已包含 glm 稳定版和实验性 glm 扩展。 为什么我不能使用int * vec

【问题讨论】:

  • glm中是否有免费的功能支持2*v?试试 v * 2,这样你实际上在 vec3 上调用了 operator*。
  • “fundamentals-ts”标签与此有什么关系?

标签: c++ fundamentals-ts


【解决方案1】:

这是因为没有表单的全局重载运算符

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

v * 2 是否可以正常工作? (成员函数运算符重载就足够了。)

或者甚至可能是2f * v,这将要求重载的* 运算符的第一个参数是float

【讨论】:

    【解决方案2】:

    2 是一个整数,而 glm::vec3 的元素是浮点数。试试这个:

    glm::vec3 twiceV = 2.0f * v;
    

    我还将浮点值传递给构造函数 (4.0f),只是为了明确表明您正在处理浮点数。

    或者,您可以使用整数向量glm::ivec3

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

    当然,整数向量只能保存整数值,这可能不是你想要的。

    【讨论】:

      猜你喜欢
      • 2015-08-07
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多