如何解决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 举报,一经查实,本站将立刻删除。