【问题标题】:Ambiguous call on glm::slerp对 glm::slerp 的模糊调用
【发布时间】:2017-05-21 06:32:07
【问题描述】:

错误是(使用 VS2013 - GLM):

重载函数“glm::slerp”的多个实例匹配 参数列表:函数模板“glm::detail::tquat glm::slerp(const glm::detail::tquat &x, const glm::detail::tquat &y, const T &a)" 函数模板 "T glm::slerp(const glm::detail::tquat &x, const glm::detail::tquat &y, const T &a)" 参数类型有:(glm::quat, glm::quat, float)

我用两个 glm::quat 和一个常量浮点值来调用它,就像你对 glm::lerp 和 glm::mix 所做的那样。错误消息中显示的两个重载函数仅在返回类型上有所不同。我一直在寻找没有任何运气的答案。

确切的调用:

const float t = 0.5f;
glm::quat newQ = glm::slerp(quatA, quatB, t); 

【问题讨论】:

  • 我不认为 VS2013 将您指向错误所指的文件内声明?

标签: c++ opengl glm-math


【解决方案1】:

在 C++ 中不可能(听到非法)函数定义仅在返回类型上有所不同,因为返回类型不是签名的一部分,因此会违反一个定义规则。

我建议你明确地编写模板参数,或者转换为你确定的东西?

【讨论】:

  • 这就是我发布这个的原因,因为它没有意义 - 签名是基于参数的。但是,这是我收到的错误消息,是的,我尝试过投射但没有任何运气。
  • 也许您找到的具有相同签名的 2 个函数不存在于同一个命名空间中。这是一种典型的gml 设计技术,其中实现位于detail 命名空间中,并通过using 指令根据包含或定义将它们带到glm 命名空间,以以可配置的方式引入功能。
  • 我将 GLM 更新到了最新版本,现在可以使用 slerp 功能而不会变红(我错过了 12 月的更新)。可悲的是,我遇到了其他人遇到的另一个问题(我留下了评论):stackoverflow.com/questions/28023412/…
  • 我将坚持使用编译良好的 0.9.5.4 版本。 6.x 版本似乎有一些问题需要解决,所以我会等待它更新。这个版本不能用 slerp 编译(同样的问题),但现在它的信息量更少,因为它不会变红(编译期间只是一个 c2668)。我想我现在只写自己的 slerp 函数,或者坚持使用 glm::mix 并继续做其他事情,直到 GLM 更新。还是谢谢。
  • 如何在这里提交有关该事实的内容:github.com/g-truc/glm/issues 不要忘记将此页面作为链接提及
猜你喜欢
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
相关资源
最近更新 更多