2
我需要一个lambda函数来将Eigen::VectorXd
转换为Eigen::MatrixXd
,不幸的是,当我尝试传递const引用时,它不起作用。为什么我不能这样做?任何解决方法?将Eigen :: VectorXd转换为Eigen :: MatrixXd的C++ lambda函数
#include <Eigen/Dense>
#include <iostream>
typedef Eigen::Matrix< double, Eigen::Dynamic, 1 > Vec;
typedef Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > Mat;
int main(int argc, char **argv) {
Vec v (3);
v(0) = 1.0;
v(1) = 2.0;
v(2) = 3.0;
auto lambda = [](Vec vec) {return Eigen::Map<Mat>(vec.data(), vec.size(), 1);};
Mat m = lambda(v);
std::cout << m(0,0) << "\n";
std::cout << m(1,0) << "\n";
std::cout << m(2,0) << "\n";
// does not work
auto lambda2 = [](const Vec& vec) {return Eigen::Map<Mat>(vec.data(), vec.size(), 1);};
return 0; }
的错误消息是error: invalid conversion from 'const Scalar* {aka const double*}' to 'Eigen::Map<Eigen::Matrix<double, -1, -1>, 0, Eigen::Stride<0, 0> >::PointerArgType {aka double*}' [-fpermissive]
编译器告诉你,你正试图转换一些是co nstant('const Scalar *')为非常量。我没有'Eigen'头文件,所以我在这里猜测说'Matrix'的构造函数不像'vec.data()'是const – ZivS
尝试添加'typedef Eigen :: Matrix(vec.data(),vec.size(),1 );};'编译 –
ZivS
@ZivS没有不行,对不起。 – Taylor