c – 在Matlab mex文件中使用特征向量

我正在尝试使用特征库来创建一个我想要在Matlab中制作mex文件的c.我将代码分解为下面的基本要点.我需要制作一个返回向量,其长度对应于输入矩阵的行数.

使用下面的代码,我得到与该行对应的编译时的以下错误:

double y_OUT [nrow] = {};

>错误C2057:预期的常量表达式错误
>错误C2466:无法分配常量大小为0的数组

我无法弄清楚为什么我不能分配长度为nrow的向量.
通过取消注释特定行并通过打印nrow我验证它实际上包含正确的数字.有没有人能给出任何指针(双关语)?

     void mexFunction(
             int          nlhs,
             mxArray      *plhs[],
             int          nrhs,
             const mxArray *prhs[]
             )
    {



      double *x_IN;
      int nrow,ncols;

      /* Check for proper number of arguments */
      //...

      x_IN = mxGetPr(prhs[0]);
      nrow = (int)mxGetM(prhs[0]);
      ncols = (int)mxGetN(prhs[0]);

      double y_OUT[nrow] = {};

      MatrixXd x=Map<MatrixXd>(x_IN,nrow,ncols);
      VectorXd Respons=VectorXd::Zero(nrow);

      Map<VectorXd>(y_OUT,nrow)=Respons.array();
      return;
    }

解决方法:

你没有在那里分配任何东西.双线y_OUT [nrow] = {};包含两个错误.如错误消息所述.

> nrow不是constexpr.它无法在编译时进行评估.
>通过大括号初始化器,你建议向量有0个元素,它也没有意义.

动态分配的正确语法是:double * y_OUT = new double [nrow];.我想这就是你想要的.您使用的语法是双y_OUT [nrow]用于静态分配,换句话说,必须在编译时知道数组的大小.

旁注:当然你需要记住释放你保留的记忆.这个问题与IMO主题完全无关=)

上一篇:c – 多个文件使用的头文件中的struct声明导致架构x86_64的重复符号


下一篇:c – 单精度矩阵运算的特征性能AVX与SSE没有差异?