我下载了 Eigen (3) 库并开始使用它。我写了一个模板函数,并在函数内部声明了一个“模板类型”的局部变量。我收到以下编译错误。
$ g++ EigenTest.cpp
EigenTest.cpp: In instantiation of ‘void myFunc(Eigen::MatrixBase<Derived>&) [with Type1 = Eigen::Matrix<double, -1, -1>]’:
EigenTest.cpp:24:10: required from here
EigenTest.cpp:16:26: error: conversion from ‘Eigen::DenseCoeffsBase<Eigen::Matrix<double, -1, -1>, 1>::Scalar {aka double}’ to non-scalar type ‘Eigen::Matrix<double, -1, -1>’ requested
Type1 tmp = matrix(0, 0);
“EigenTest.cpp”如下所示。
#include "Eigen/Dense"
#include <iostream>
template<typename Type1>
void myFunc(Eigen::MatrixBase<Type1>& matrix)
{
int i=matrix.rows();
Type1 tmp = matrix(0, 0); // getting compiler error here
std::cout<<"tmp is ->"<<tmp<<std::endl;
}
int main()
{
Eigen::MatrixXd m(2,2);
m.setConstant(100);
myFunc(m);
return 0;
}
我也尝试使用'typename Type1 tmp = matrix(0, 0);'
这也没有用!
如何解决这个问题?在普通的 C++ 模板编程中(没有 Eigen),我可以在模板函数中定义一个局部变量为 'Type1 tmp;"