Как определить размер собственной матрицы на основе переменной, переданной функции - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь написать код, который должен определить размер матрицы на основе ввода. Сокращенная версия кода, который показывает проблему:

 #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 голосов
/ 03 июля 2018

Согласно документации , если вы не знаете размер матрицы во время компиляции, вам нужно использовать параметры шаблона размера матрицы как 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);
}
...