C ++:对函数的未定义引用但是类似的函数可以正常工作

问题描述

我已经在许多“未定义的引用”帖子中寻找我的问题的答案,但是这里似乎都没有问题。我会尽力解释。

我有一个disnovo”类,其中有两个使用本征的函数

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);

文件位于.h文件中,而定义位于.cpp文件

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 (将#修改为@)