类中的模板化函数,移动到头文件时出错?

时间:2017-01-19 14:28:55

标签: c++ templates

我在一个类中有这个模板化的函数。 这是在名为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,其中指出第一个代码应该有效。但是,我无法找到如何正确地将代码分成标题和源代码。应该怎么做?

0 个答案:

没有答案