我试图在c ++中使用特征库,但是获得错误运行时。
#include<iostream>
#include <Eigen/Dense>
using namespace Eigen;
int main ()
{
MatrixXd mat1;
int i,j;
i=4;
j=3;
mat1(i,j);
float ct=1.0;
for(int m=0;i<i;m++)
{
for (int n=0;n<j;n++)
{
mat1(m,n)= ct;
ct = ct+1.0;
}
}
std::cout<<"size of matrix is :"<<mat1.size()<<std::endl;
std::cout<<"rows = "<<mat1.rows()<<"\t columns = "<<mat1.cols();
//std::cout<<mat1;
}
我在/usr/local/include/
处提取了特征库并编译为g++ test4.cpp -o test4
。编译时没有错误。但是在运行时,我得到了
test4: /usr/local/include/Eigen/src/Core/DenseCoeffsBase.h:365: Eigen::DenseCoeffsBase<Derived, 1>::Scalar& Eigen::DenseCoeffsBase<Derived, 1>::operator()(Eigen::Index, Eigen::Index) [with Derived = Eigen::Matrix<double, -1, -1>; Eigen::DenseCoeffsBase<Derived, 1>::Scalar = double; Eigen::Index = long int]: Assertion `row >= 0 && row < rows() && col >= 0 && col < cols()' failed.
Aborted (core dumped)
有什么建议吗?有人也可以建议如何使用我的typedef
而不是预定义的 "autoload":{
"psr-4":{
"MicroSite\\": "src"
}
}
吗?还有,有没有特殊的方法来显示矩阵(如最后一行代码所示)?
答案 0 :(得分:2)
mat1(i,j);
不符合您的想法。它是重载的operator()
,只是尝试访问一个元素并返回一个引用,它不会调整矩阵的大小。
你需要做
MatrixXd mat1(i,j);
或使用
mat1.resize(i,j);