如何基于传递给函数的变量定义特征矩阵大小

时间:2018-07-03 19:54:05

标签: c++ eigen

我正在尝试编写需要根据输入定义矩阵大小的代码。显示该问题的代码的简化版本是:

 #include <iostream>
    #include "eigen/Eigen/Dense"
    #include <cmath>

    using namespace Eigen;

    void matrixname(  const int numbRow, const int numbcol);

    int main()
    {
    const int numbRow=5;
    const int numbCol=3;

    matrixname(numbRow,numbCol);
    return 0;
    }

    void matrixname(  const int numbRow, const int  numbCol)
    {
    Matrix<double,numbRow,numbCol> y;
    }

尝试编译代码时,返回以下错误:

/main.cpp:20:15:错误:非类型模板参数不是常量表达式

在试图定义y的最后一行中,构建中断。

有什么方法可以修改变量的声明或传递,以便能够以此方式定义矩阵的大小?

1 个答案:

答案 0 :(得分:1)

根据documentation,如果您在编译时不知道矩阵的大小,则需要将矩阵大小模板参数用作Eigen::Dynamic

因此,您可能必须按如下所示修改功能:

void matrixname(  const int numbRow, const int  numbCol)
{
    Matrix<double,Eigen::Dynamic,Eigen::Dynamic> y1(numbRow, numbCol);

    // Eigen also provides a typedef for this type
    MatrixXd y2(numbRow, numbCol);
}