C++ 运行时的特征断言错误

C++ 运行时的特征断言错误,c++,eigen,C++,Eigen,我正在编译一个使用多个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

我正在编译一个使用多个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.
darwin-pi2:/usr/include/Eigen/src/Core/Assign.h:498:Derived&Eigen::DenseBase::lazysassign(const-Eigen::DenseBase&)[与OtherDerived=Eigen::Matrix;Derived=Eigen::Matrix]:断言“rows()==other.rows()&&cols()==other.cols()”失败。

我猜这与特征矩阵有关,但我不明白什么是
断言rows()==other.rows()&&cols()==other.cols()”失败的意思。
因为
特征::MatrixXd
在运行时确定了维度,所以编译时大小检查都被禁用并推迟到运行时


在本例中,看起来您正在从动态大小矩阵分配到15x15矩阵。尝试再次检查并调试动态矩阵的大小。

在matlab中,矩阵
m
的索引从1开始。但在eigen中,它从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;
}
#包括
#包括
使用特征::矩阵XXD;
int main()
{
矩阵m(2,2);
m(0,0)=3;//索引从0开始,而不是从1开始
m(1,0)=2.5;
m(0,1)=-1;
m(1,1)=m(1,0)+m(0,1);

std::我可以使用
Eigen::MatrixXd
吗?因为大小取决于变量,所以我不能使用固定大小的矩阵。实际上,现在我需要它们为15x15,这会有什么问题?@joaocandre没有设计问题。只要使用调试器在赋值时验证维度是否为15x15。