通过 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());
给我报错的代码如下。当我从参数类型中删除 "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());