通过 const 引用传递后使用 Eigen::Map 发生错误

An error occured using Eigen::Map after pass by const reference

给我报错的代码如下。当我从参数类型中删除 "const" 时,它起作用了。

#include<iostream>
#include<vector>
#include</usr/include/eigen3/Eigen/Core>
using namespace std;

void func(const vector<double>& x)
{
  Eigen::VectorXd X=Eigen::Map<Eigen::VectorXd>(&x[0], x.size());
}

int main(){
  vector<double> x(100);
  func(x);
}

错误如下。我无法理解。谁能给我解释一下?有没有好的方法可以用 "const" 关键字做同样的事情?

error: invalid conversion from ‘const value_type* {aka const double*}’ to ‘Eigen::Map<Eigen::Matrix<double, -1, 1>, 0, Eigen::Stride<0, 0> >::PointerArgType {aka double*}’ [-fpermissive]
   Eigen::VectorXd X=Eigen::Map<Eigen::VectorXd>(&x[0], x.size());

试试这个:

void func(vector<double>& x)
{
  Eigen::VectorXd X=Eigen::Map<Eigen::VectorXd>(x.data(), x.size());
}

要么使用静态方法VectorXd::Map自动推断常量:

Eigen::VectorXd X = Eigen::VectorXd::Map(x.data(), x.size());

或明确地使其成为常量:

Eigen::VectorXd X = Eigen::Map<const Eigen::VectorXd>(x.data(), x.size());

而不是在 VectorXd 中进行深层复制,您可能更愿意命名 Map 对象以直接使用它:

Eigen::Map<const Eigen::VectorXd> X(x.data(), x.size());