我在Eigen文档网站上有一段关于切片和解算的代码:
#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 << "nn";
cout << "A(all,ind):n" << A(all,ind) << "nn";
return 0;
}
当我尝试编译时,我会遇到多个错误,例如:
all
不是Eigen
的成员- 未在此范围中声明
all
- 未在此范围中声明
last
seq
不是Eigen
的成员- 无法解析函数
seq
MatrixXi::Random
无效参数
如何修复这些错误
看起来我有错误版本的Eigen(它在这里起作用(,然而,根据这个答案,我有:EIGEN_WORLD_VERSION 3
EIGEN_MAJOR_VERSION 3
CCD_ 11,我相信这是最新的。
就安装而言,我将Eigen
文件夹复制到项目位置,并为g++编译器提供了一个路径(-I标志(到上面的一个文件夹。图书馆本身似乎运作良好;例如,此代码(来自提供的示例(运行良好:
#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问题中的文档指的是不支持符号all
、last
和seq
的3.3.9版本。对于最新的稳定(3.3.7(版本,必须使用block
或reshape
运算符。
这里的教训是:始终检查文档版本是否与所用库的版本匹配。