编译特征程序时出错:错误:'seq'不是'Eigen'的成员
Error while compiling eigen program: error: 'seq' is not a member of 'Eigen'
我正在尝试在遵循算术序列的索引中索引矩阵。根据官方网站上的 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((
检查官方回购后
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(,不包括该文件。因此,如果其他人发现相同的问题,请尝试克隆官方存储库。
所需的函数位于文件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-rc1
和master
分支中。
所以回答你的问题:你很可能使用的是旧版本的 Eigen,你需要使用 Eigen 3.4.0-rc1
或更高版本。
- 检查输入是否不是整数或数字
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 为什么使用SFINAE而不是函数重载
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 为什么std::valarray不是算术的
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 为什么使用__LINE_的代码在发布模式下在MSVC下编译,而不是在调试模式下
- MSVC是否支持C++11样式的属性而不是__declspec
- 为什么文件名被设置为一个点,而不是在读取矢量中的文件名时
- 为什么make_tie不是一件事
- 在调用接收数组的方法时,模板化数组大小是不是一种糟糕的做法
- 为什么std::isnan 不是 constexpr?
- GlobalAlloc而不是其他分配方法
- 当比特(而不是字节)的顺序至关重要时的持久性
- 为什么复制而不是移动数据元素?
- 编译特征程序时出错:错误:'seq'不是'Eigen'的成员
- Visual studio包含Eigen/Array而不是std::Array
- C++ Eigen: 'Options' : 不是'Eigen::MatrixBase<Derived>'的成员
- Eigen::Matrix |为什么Eigen期望int而不是size_t
- 是否有可能为c++构建Eigen库而不是使用预构建的文件?