You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

glm::dot返回值异常?赋值glm::dvec3点积时类型不兼容报错

解决glm::dot赋值时double与glm::dvec3类型不兼容的问题

这个报错的核心原因其实非常直白:你把glm::dot返回的double类型标量值,赋值给了一个声明为glm::dvec3的向量变量weight,两种类型完全不兼容,编译器自然会抛出类型不匹配的错误。

先看能复现你问题的代码示例

#include <glm/glm.hpp>

int main() {
    glm::dvec3 vec1(1.0, 2.0, 3.0);
    glm::dvec3 vec2(4.0, 5.0, 6.0);
    glm::dvec3 weight; // 错误:这里把weight声明为三维向量类型
    weight = glm::dot(vec1, vec2); // 编译器报错:double无法赋值给glm::dvec3
    return 0;
}

在GLM 0.9.8版本中,glm::dot对于两个glm::dvec3的计算结果是一个双精度标量(double)——毕竟三维向量的点积本身就是一个数值,而非向量。你把这个标量赋值给向量类型的变量,这就是冲突的根源。

最简单的修正方案

只需要把weight的类型从glm::dvec3改成double即可:

#include <glm/glm.hpp>

int main() {
    glm::dvec3 vec1(1.0, 2.0, 3.0);
    glm::dvec3 vec2(4.0, 5.0, 6.0);
    double weight; // 修正为双精度标量类型
    weight = glm::dot(vec1, vec2); // 类型匹配,编译通过
    return 0;
}

额外补充:如果需要把标量转为向量

如果你确实需要将点积的标量结果存储到glm::dvec3中(比如让向量的三个分量都等于这个标量),可以直接用GLM的构造函数初始化:

double weight_scalar = glm::dot(vec1, vec2);
glm::dvec3 weight_vec(weight_scalar); // 三个分量都会被设为weight_scalar的值

内容的提问来源于stack exchange,提问作者resnet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:02:24