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