运行时断言错误



我正在编译一个使用几个Eigen::MatrixXd方法的程序,虽然我在编译它时没有得到错误,但运行它时我得到以下错误:

darwin-pi2: /usr/include/Eigen/src/Core/Assign.h:498: Derived& Eigen::DenseBase<Derived>::lazyAssign(const Eigen::DenseBase<OtherDerived>&) [with OtherDerived = Eigen::Matrix<double, -1, -1>; Derived = Eigen::Matrix<double, 15, 15, 0, 15, 15>]: Assertion `rows() == other.rows() && cols() == other.cols()' failed.

我猜是和特征矩阵有关的东西,但是我不明白Assertion rows() == other.rows() && cols() == other.cols()' failed是什么意思

因为Eigen::MatrixXd的维度是在运行时确定的,所以编译时的大小检查都是禁用的,并且延迟到运行时。

在这种情况下,看起来你是从一个动态大小的矩阵分配到一个15x15的矩阵。

在matlab中,矩阵m的索引从1开始。但在本征中,它从0开始。给出一个简单的例子。

#include <iostream>
#include <Eigen/Dense>
using Eigen::MatrixXd;
int main()
{
  MatrixXd m(2,2);
  m(0,0) = 3;  //  INDEX starts from 0, not 1
  m(1,0) = 2.5;
  m(0,1) = -1;
  m(1,1) = m(1,0) + m(0,1);
  std::cout << m << std::endl;
}

更多信息,请点击docs.

最新更新