似乎来自signiture of the row() function在 Eigen 中它不是 const
所以你不能在 const 引用上调用这个函数,例如const Matrix& x
x.row(i);
是不允许的。
如果我需要一个 const 方法来获取 第 i 行 x?
您知道 row()
函数不是常量的原因吗?
typedef Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> Matrix;
void func(const Matrix& x) {
// Something something
x.row(i); // Error: Non-const function row called on const object
// Something something
}
免责声明:我的问题很明显,对于有经验的 Eigen
开发人员来说可能需要 2 秒,对陈词滥调表示歉意。如果您确信答案显而易见,请随时关闭帖子。我在没有人知道答案的情况下尝试了 C++ 聊天。
最佳答案
您必须使用 过时的 损坏的 Eigen 版本。以下代码在 Eigen 3.3 下编译得很好。
#include <Eigen/Core>
typedef Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> Matrix;
void func(const Matrix& x) {
x.row(0);
}
int main() {
Matrix m = Matrix::Random(2,2);
func(m);
}
顺便说一句,在任何情况下都不要
void func(const Matrix& x) {
const_cast<Matrix&>(x).whatever();
}
这会调用未定义的行为! const_cast
存在的唯一原因是为了与可能不存在 const 正确性的遗留 C 接口(interface)兼容。永远不要放弃常量性来调用常量对象的常量成员函数。
关于c++ - 正确访问 const 一行特征矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48052893/