为什么 Eigen 不解析内置符号? (所有,最后,seq,等等...)

Why Eigen does not resolve built-in symbols? (all, last, seq, etc...)

我有这段代码来自 Eigen documentation 站点关于切片和非索引化的代码:

#include <iostream>
#include <Eigen/Dense>
#include <vector>
using namespace std;
using namespace Eigen;

int main() {
    std::vector<int> ind{4,2,5,5,3};
    MatrixXi A = MatrixXi::Random(4,6);
    cout << "Initial matrix A:\n" << A << "\n\n";
    cout << "A(all,ind):\n" << A(all,ind) << "\n\n";

    return 0;
}

当我尝试编译时,出现多个错误,例如:

如何修复这些错误?


看来我的 Eigen 版本不对(有效 here), however, according to this 我的答案是: EIGEN_WORLD_VERSION 3 EIGEN_MAJOR_VERSION 3 EIGEN_MINOR_VERSION 7, 我相信这是最新的。

就安装而言,我将 Eigen 文件夹复制到项目位置,并为 上面的一个文件夹 提供了一个路径(-I 标志)一个 g++ 编译器。图书馆本身似乎运作良好;例如,此代码(来自提供的示例)工作正常:

#include <iostream>
#include <Eigen/Dense>

using namespace Eigen;
using namespace std;

int main()
{
  Matrix3d m = Matrix3d::Random();
  m = (m + Matrix3d::Constant(1.2)) * 50;
  cout << "m =" << endl << m << endl;
  Vector3d v(1,2,3);

  cout << "m * v =" << endl << m * v << endl;
}

您的问题可能是 g++

-I 选项

我怀疑你有类似的东西:

g++  ....  -I<path_to_project>/Eigen

... 而它应该只是

g++  ....  -I<path_to_project>

...即最终的 Eigen 目录不应位于包含路径中。

进行此更改,然后还更改源代码,以便所有包含如下:

#include <Eigen/Dense>
#include <Eigen/Cholesky>

此外,您指的是一个变量 all 但您的程序尚未定义它。

还要确保至少启用 c++11 编译器选项。


编辑:

为了完整起见,我添加了评论中出现的答案。 OP问题中的文档指的是不支持符号alllastseq的3.3.9版本。对于最新的稳定 (3.3.7) 版本,必须使用 block or reshape 运算符。

这里的教训是:始终检查文档版本是否与所用库的版本匹配