将float *或int *赋值给mxArray

时间:2016-07-13 16:44:26

标签: c++ matlab mex

我在matlab中使用mex获得了典型的cpp函数

#include "mex.h"

void func (int * rowvec, int * colvec, float * valvec, int * nnz){/*fill arguments*/}



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

我在那里检查我有足够的输出变量可用

if(nlhs != 4) {
  mexErrMsgIdAndTxt("MyToolbox:arrayProduct:nlhs",
                  "Four outputs required.");
}

此外,在这个函数中我声明了四个变量:

int *rowvec;        /* 1st output array */
int *colvec;        /* 2nd output array */
float *valvec;      /* 3rd output array */
int *nnz;           /* 4th output scalar */

将在函数中定义/填充它们:

func(rowvec, colvec, valvec, nnz) //arguments get filled with values

现在我想做那样的事情:

plhs[0] = rowvec;
plhs[1] = colvec;
plhs[2] = valvec;
plhs[3] = nnz;

遗憾的是,它抛出了四个可理解的错误,因为它们是两种不同的数据类型。错误是这样的:

cannot convert ‘int*’ to ‘mxArray* {aka mxArray_tag*}’ in assignment plhs[0] = rowvec;

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

你错过了一步。

您需要使用mxCreateNumericArray并将其分配给输出参数。

然后在创建的数组上使用mxGetData,并将int / float指针设置为。

然后调用func填充输出。

plhs[0] = mxCreateNumericArray(ndim, *dims, classid, ComplexFlag);
...
rowvec=(int*)mxGetData(plhs[0]);
...
func(rowvec, colvec, valvec, nnz);

如果您可以更改界面,则可能需要考虑使用func(plhs)。在使用指针之前,您需要知道输出数组的大小。