问题描述
我已经在许多“未定义的引用”帖子中寻找我的问题的答案,但是这里似乎都没有问题。我会尽力解释。
Eigen::Matrix4f calculateTransform(Eigen::Matrix<float,6,1> chi);
Eigen::Matrix<float,1> calculateTwist(Eigen::Matrix4f T);
除了double
之外,我还想将该函数与float
一起使用,因此我尝试了重载,但是没有用。然后,我尝试使用模板,并创建了以下内容:
template <typename Derived>
Eigen::Matrix<typename Derived::Scalar,-1,-1> calculateTransform(const Eigen::MatrixBase<Derived>& chi);
template <typename Derived>
Eigen::Matrix<typename Derived::Scalar,-1> disnovo::calculateTransform(const Eigen::MatrixBase<Derived>& chi)
{
Matrix<typename Derived::Scalar,4,4> T,Tchi;
Tchi.setZero();
Tchi(0,1) = -chi(5); Tchi(0,2) = chi(4);
Tchi(1,0) = chi(5); Tchi(1,2) = -chi(3);
Tchi(2,0) = -chi(4); Tchi(2,1) = chi(3);
T = Tchi.exp();
T(0,3) = chi(0); T(1,3) = chi(1); T(2,3) = chi(2);
return T;
}
这很好用,所以我尝试对其他功能做同样的事情:
// .h
template <typename Derived>
Eigen::Matrix<typename Derived::Scalar,-1> calculateTwist(const Eigen::MatrixBase<Derived>& T);
// .cpp
template <typename Derived>
Eigen::Matrix<typename Derived::Scalar,-1> disnovo::calculateTwist(const Eigen::MatrixBase<Derived>& T)
{
Matrix<typename Derived::Scalar,1> chi;
Matrix<typename Derived::Scalar,4> Tchi;
chi(0) = T(0,3); chi(1) = T(1,3); chi(2) = T(2,3);
chi(3) = Tchi(2,1); chi(4) = Tchi(0,2); chi(5) = Tchi(1,0);
return chi;
}
但这是在链接时创建undefined reference to `Eigen::Matrix<Eigen::Matrix<float,4>::Scalar,-1> disnovo::calculateTwist<Eigen::Matrix<float,4> >(Eigen::MatrixBase<Eigen::Matrix<float,4> > const&)'
(我认为)。
我在这里做错了什么? 为什么其中一个起作用而另一个不起作用?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)