在C ++中使用特征库时出错

时间:2017-01-29 17:23:45

标签: c++ eigen

我试图在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" } } 吗?还有,有没有特殊的方法来显示矩阵(如最后一行代码所示)?

1 个答案:

答案 0 :(得分:2)

mat1(i,j);

不符合您的想法。它是重载的operator(),只是尝试访问一个元素并返回一个引用,它不会调整矩阵的大小。

你需要做

MatrixXd mat1(i,j);

或使用

mat1.resize(i,j);