gpt4 book ai didi

c++ - 无法理解这是循环依赖还是 Clang

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:09:45 26 4
gpt4 key购买 nike

我在 Clang/OS X Yosemite 上,我的项目很好地使用了 Eigen。然后我引入了一个也使用 Eigen 的外部库,现在我有这个编译错误:

/usr/local/include/Eigen3/Eigen/src/Geometry/Quaternion.h:516:13: Implicit instantiation of undefined template 'Eigen::internal::quaternionbase_assign_impl<Eigen::Matrix<double, 3, 1, 0, 3, 1>, 3, 1>'

这似乎来自库中的声明:

#include <Eigen/Eigen>

这是我使用四元数的代码:

Eigen::Quaternion<double> q, q_wv, q_ic, q_cv;
q_cv = _poseHandler->GetAttitudeMeasurement(); // problem here

首先,由于包含考虑了核心和几何,我不认为它缺少标题。然后我不明白“未定义的模板”错误,因为如果你去查看它,内部模板是在同一个标​​题中声明的。所以我留下了一个问题:出了什么问题?

更新:

我更改了库中的所有内容以使用 import指令而不是 include , 但它并没有解决问题。另外,如果我导入 <Eigen/Core>在使用该库的类中它很好,但如果我导入 <Eigen/Geometry> 就不行了.

最佳答案

好吧,这并不能完全告诉您哪里出了问题,但希望能为您指明正确的方向。问题是 quaternionbase_assign_impl 似乎不支持 3X1 矩阵。 (除非有其他代码以某种方式进入翻译单元。)它有一个前向声明:

template<typename Other,
int OtherRows=Other::RowsAtCompileTime,
int OtherCols=Other::ColsAtCompileTime>
struct quaternionbase_assign_impl;

然后有两个专业:

template<typename Other>
struct quaternionbase_assign_impl<Other,3,3> { ... };

template<typename Other>
struct quaternionbase_assign_impl<Other,4,1> { ... };

模板没有“通用”定义。因此,当编译器尝试实例化

Eigen::internal::quaternionbase_assign_impl<Eigen::Matrix<double, 3, 1, 0, 3, 1>, 3, 1>

没有匹配项。请注意,3X1 来自前向声明,其中给出了默认模板参数。如果您发布完整的错误消息,我们或许能够追踪到最终试图导致 3X1 quaternionbase_assign_impl 被实例化的实例化链的开头。

关于c++ - 无法理解这是循环依赖还是 Clang,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27094132/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com