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

Ald*_*diT 8 c++ eigen3

我试图在遵循等差数列的索引中对矩阵进行索引。根据官网的 Eigen 教程,我应该使用 Eigen::seq(firstVal, lastVal, step) 来生成这个序列。调用此错误后,会弹出此线程的标题中粘贴的错误。

我检查了本地 eigen 文件夹的所有文件,以获取“seq”方法,但没有运气。它不在任何地方。我想这意味着某些文件丢失了,对吧?

代码就像这样。

顶部的标题

#include <iostream>
#include <string>
#include <chrono>
#include "Eigen/Dense"
#include "Eigen/Core"
#include <cmath>
#include <random>
Run Code Online (Sandbox Code Playgroud)
#include <iostream>
#include <string>
#include <chrono>
#include "Eigen/Dense"
#include "Eigen/Core"
#include <cmath>
#include <random>
Run Code Online (Sandbox Code Playgroud)

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

错误输出:

error: 'seq' is not a member of 'Eigen'
Run Code Online (Sandbox Code Playgroud)

预期的结果是从矩阵 m2 中获取行(其中 m2.cols() < m1.cols())并将行的值分配给 m1 相同行号中的某些索引。

Cur*_*hts 8

检查官方回购后

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),并且不包括文件。所以,如果其他人发现同样的问题,请尝试克隆官方 repo。

  • 感谢你的回答。我在使用 `Eigen::all` 时遇到了麻烦,这很奇怪,因为我从[官方网站链接](http://bitbucket.org/eigen/eigen/get/3.3.7) 下载了 `.zip`。最新版本 3.3.7 的 (.zip)。按照您的建议从 Github 克隆另一个版本后,我能够使用这个“all”运算符。 (7认同)
  • 那么在 Eigen 的最新稳定版本中没有办法使用 operator() 来切片数组吗? (3认同)

Ste*_*fan 5

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

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

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

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