我写了一个像
这样的课程class abc
{
public:
template <typename Derived >
abc( const Eigen::MatrixBase < Derived > &matA,
const Eigen::MatrixBase < Derived > &matB,
Eigen::MatrixBase < Derived > &matC );
};
template <typename Derived >
abc::abc( const Eigen::MatrixBase < Derived > &matA,
const Eigen::MatrixBase < Derived > &matB,
Eigen::MatrixBase < Derived > &matC )
{
matC.derived().resize( matA.rows(), matA.cols() );
for( int r = 0; r < matA.rows(); r++ )
{
for( int c = 0; c < matA.cols(); c++ )
{
matC(r,c) = log( matA(r,c) )/log( matB(r,c) );
}
}
}
但在main中使用类abc时 我得到未定义的引用错误
typedef Eigen::Matrix< float, Eigen::Dynamic, Eigen::Dynamic > Matrix_Float;
main()
{
Matrix_Float matA, matB, matC;
// put values in matA, matB
abc cls_abc( matA, matB, matC );
}
错误是 错误:未定义引用`abc :: abc&lt; Eigen :: Matrix&lt; float,-1,-1,0,-1,-1&gt; &GT; (Eigen :: MatrixBase&lt; Eigen :: Matrix&lt; float,-1,-1,0,-1,-1&gt;&gt; const&amp;,Eigen :: MatrixBase&lt; Eigen :: Matrix&lt; float,-1 ,-1,0,-1,-1&gt;&gt; const&amp;,Eigen :: MatrixBase&lt; Eigen :: Matrix&lt; float,-1,-1,0,-1,-1&gt;&gt;&amp;) &#39;
类定义的语法有什么问题吗?
请帮忙。答案 0 :(得分:0)
你有一些问题。首先,对于模板类,您需要使用声明提供实现(即在.h
文件中,而不是.cpp
)。其次,您希望该类是模板化的,请注意构造函数。第三,使用模板化类时,需要指定模板参数。
将所有这些组合在一起,您的类(.h
)文件应如下所示:
template <typename Derived > class abc // Template the class
{
public:
//template <class Derived > // Don't put this here, but above
abc(
const Eigen::MatrixBase < Derived > &matA,
const Eigen::MatrixBase < Derived > &matB,
Eigen::MatrixBase < Derived > &matC);
};
template <typename Derived >
abc<Derived>::abc(
const Eigen::MatrixBase < Derived > &matA,
const Eigen::MatrixBase < Derived > &matB,
Eigen::MatrixBase < Derived > &matC)
{
matC.derived().resize(matA.rows(), matA.cols());
for (int r = 0; r < matA.rows(); r++)
{
for (int c = 0; c < matA.cols(); c++)
{
matC(r, c) = log(matA(r, c)) / log(matB(r, c));
}
}
}
并且您的main()
应如下所示:
int main(int argc, char* argv[]) // just "main()" is so passé
{
Matrix_Float matA, matB, matC;
// put values in matA, matB
abc<Matrix_Float> cls_abc(matA, matB, matC);
}