【问题标题】:Cannot understand if this is circular dependency or Clang无法理解这是循环依赖还是 Clang
【发布时间】:2014-11-23 20:48:52
【问题描述】:

我在 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,但这并没有解决问题。此外,如果我在使用该库的类中导入 &lt;Eigen/Core&gt; 就可以了,但如果我导入 &lt;Eigen/Geometry&gt; 则不行。

【问题讨论】:

  • 也使用 Eigen 的外部库是否包含 Eigen 标头,是否可能使用不同版本的 Eigen?
  • 不,我的项目中包含库的源代码,所以使用相同的版本。
  • 嗯...这可能是一个循环包含。使用 -E 选项运行,使用编辑器查看预处理输出。
  • 另外,您应该三重检查您收到错误的模板是否确实已定义。检查准确的拼写等。顺便说一句,你说它在同一个标​​题中声明。你的意思是真的意味着声明而不是“定义”吗?因为如果只是声明,那是不够的。
  • 它是前向声明的,然后在同一个文件中定义(但在有错误的行之后):bitbucket.org/eigen/eigen/src/… 试图找到如何在 XCode 中使用 -E 选项

标签: c++ templates eigen


【解决方案1】:

嗯,这并不能完全告诉您出了什么问题,但希望能指出您正确的方向。问题是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 被实例化的实例化链的开头。

【讨论】:

  • ZOMG 我不敢相信我没有看实际的模板参数,最后这是一个非常愚蠢的错误!有问题的函数实际上必须返回一个四元数,而不是一个 3x1 矩阵。谢谢你,你解开了我的障碍,也让我学到了一些非常有用的东西! (编译器错误有点混乱)
猜你喜欢
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 2018-09-30
  • 1970-01-01
  • 2015-01-21
  • 1970-01-01
相关资源
最近更新 更多