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

标签 c++ constants pass-by-reference eigen

<分区>

给我一​​个错误的代码如下。当我从参数类型中删除“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());

最佳答案

要么使用静态方法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());

关于c++ - 通过 const 引用传递后使用 Eigen::Map 发生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51018326/

相关文章:

c++ - 定义遍历函数的 const 和非常量版本

c++ - 引用 std::thread 参数

c++ - 模板特化函数 C++

c++ - CryptDecrypt winapi 函数出错?

c++ - 使用整数转换重载而不是 bool 转换重载

c - 如何初始化全局常量指针?

python - 在 Linux 程序中嵌入 Python

c++ - boost::function 变量在析构函数中为空

javascript - 修改 Javascript 中通过引用传递的变量

java - Java ArrayList中的对象不会更新