编写Mex文件时出现错误信息,函数数组输出有问题吗?

时间:2011-07-11 06:55:38

标签: matlab openmp mex

我更像是一名Matlab程序员,多年来没有使用过C语言!现在我必须在C中编写一些代码,并通过mexFunction命令从Matlab调用它。到现在为止还挺好。但是我的代码需要很多函数调用,其中参数和返回值都是数组。为此,我使用指针返回。但是我遇到了大约一百万个困难,一旦修复另一个就会产生困难。

排序代码示例如下(实际代码很大)

#include "mex.h"
#include "math.h"

int Slength=95;


double innercfunction(double q,double y)
{
  int i;
  double X;

  X=q*y;

}

double *c1function(double q,double Sim[])
{
  double *F12=malloc(Slength);
  int i;
  double vdummy,qdummy;
  qdummy=q;

  for(i=0;i<Slength;i++)
  {
    vdummy=Sim[i];
    F12[i]=innercfunction(qdummy,vdummy);
  }
  return F12;
}


void mexFunction(int nlhs, mxArray *prhs[],int nrhs,const mxArray *plhs[])
{
  double *q=mxGetPr(prhs[0]);
  double *Sim=mxGetPr(prhs[1]);

  double *SS=c1function(q,Sim);
}

我将其保存为help_file.c并从MATLAB工作区编译为:

mex -g help_file.c

我得到以下错误:

help_file.c: In function ‘mexFunction’:
help_file.c:38: error: incompatible type for argument 1 of ‘c1function’
help_file.c:17: note: expected ‘double’ but argument is of type ‘double *’

我尝试过最初传递Sim [i]而不是vdummy,这不起作用,这就是我首先定义虚拟变量的原因。

我想这是一个微不足道的问题,但我仍然会感谢大家对此的帮助。

1 个答案:

答案 0 :(得分:3)

clfunction的原型要求你传递标量double作为第一个参数;你正在传递指针到双q,因此编译错误。你期望prhs[0]包含一个标量吗?如果是这样,您可以使用q[0]来提取值;或者,您可以使用mxGetScalar(prhs[0])返回标量 - 双精度(http://www.mathworks.com/help/techdoc/apiref/mxgetscalar.html)。

但是,我不确定修复会使你的mex文件按预期工作。我建议花些时间阅读这里的mex示例:http://www.mathworks.com/support/tech-notes/1600/1605.html

特别是,您当前的mex文件不会产生任何输出参数,因为您没有分配到左侧plhs