我在一个类中有这个模板化的函数。 这是在名为Mtry.cpp
的文件中实现的class Mtry
{
public:
template <typename DerivedV, typename DerivedF, typename Scalar>
static void cotmatrix(
const Eigen::MatrixBase<DerivedV> & V,
const Eigen::MatrixBase<DerivedF> & F,
Eigen::SparseMatrix<Scalar>& L);
};
template <typename DerivedV, typename DerivedF, typename Scalar>
void Mtry::cotmatrix(
const Eigen::MatrixBase<DerivedV> & V,
const Eigen::MatrixBase<DerivedF> & F,
Eigen::SparseMatrix<Scalar>& L)
{
// Implementation...
}
使用该代码时没问题。 但是,如果我将声明移向Mtry.hpp并将实现移至Mtry.cpp,我会得到一个未定义的引用
Mtry.hpp:
class Mtry
{
public:
template <typename DerivedV, typename DerivedF, typename Scalar>
static void cotmatrix(
const Eigen::MatrixBase<DerivedV> & V,
const Eigen::MatrixBase<DerivedF> & F,
Eigen::SparseMatrix<Scalar>& L);
};
Mtry.cpp
template <typename DerivedV, typename DerivedF, typename Scalar>
void Mtry::cotmatrix(
const Eigen::MatrixBase<DerivedV> & V,
const Eigen::MatrixBase<DerivedF> & F,
Eigen::SparseMatrix<Scalar>& L)
{
// Implementation...
}
我看到this question,其中指出第一个代码应该有效。但是,我无法找到如何正确地将代码分成标题和源代码。应该怎么做?