编译本征程序时出错:错误:“ seq”不是“本征”的成员

时间:2019-07-17 20:23:33

标签: c++ eigen3

我正在尝试在遵循算术序列的索引中索引矩阵。根据官方网站上的Eigen教程,我应该使用Eigen :: seq(firstVal,lastVal,step)生成此序列。调用此错误后,弹出该线程标题中的错误。

我检查了本地特征文件夹中的所有文件,是否使用了“ seq”方法,但是没有运气。它不在任何地方。我想这意味着某些文件丢失了,对吧?

代码像这样。

顶部的标题

#include <iostream>
#include <string>
#include <chrono>
#include "Eigen/Dense"
#include "Eigen/Core"
#include <cmath>
#include <random>
m1(row, Eigen::seq(some_index*m1.cols(), some_index*m1.cols() + m1.cols()-1, step))= m2.block(row, 0, 1, m2.cols());

当然是m1.cols()>> m2.cols()

错误输出:

error: 'seq' is not a member of 'Eigen'

预期结果将是从矩阵m2中获得行(其中m2.cols()

2 个答案:

答案 0 :(得分:1)

检查官方仓库后

https://bitbucket.org/eigen/eigen/src/default/

所需功能在文件Eigen/src/core/ArithmeticSequence.h中,该文件包含在片段中已使用的常规头文件Eigen/Core中。

问题似乎是OP从第三方存储库下载的Eigen与主存储库不同步,并且缺少上述文件。

我为后代添加此注释:撰写本文时,最新的稳定版本为3.3.7,于2018年发布(请参阅http://eigen.tuxfamily.org/index.php?title=Main_Page),但不包含该文件。因此,如果其他人也发现相同的问题,请尝试克隆官方存储库。

答案 1 :(得分:0)

所需的函数位于文件 Eigen/src/core/ArithmeticSequence.h 中,该文件包含在通用标题 Eigen/Core 中。所以 #include "Eigen/Core 就足够了。 (正如@CuriouslyRecurringThoughts 指出的那样)。

然而,为了解决他的回答中的困惑:ArithmeticSequences 诸如 Seq 计划用于 Eigen 版本 3.4.0 因此,在此之前的版本中不存在它们.当我写这篇文章时,最新的官方版本是 3.3.9,因此不支持 ArithmeticSequences

如果您查看 official repo,您会发现该文件在 3.3.9 及更早版本中也不存在。目前,它仅包含在 3.4.0-rc1master 分支中。

所以回答您的问题:您很可能使用旧版本的 Eigen,您需要使用 Eigen 3.4.0-rc1 或更高版本。