c ++ matlab代码上的奇怪错误

这是我的代码的一部分:

double h; double sigma; /* The gateway function */ void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { double *nor; int n = mxGetScalar(prhs[0]); h = mxGetScalar(prhs[1]); nor = mxGetPr(prhs[2]); sigma = mxGetScalar(prhs[3]); double *x; /* create the output vector */ plhs[0] = mxCreateDoubleMatrix(1,n,mxREAL); /* get a pointer to the real data in the output matrix*/ x = mxGetPr(plhs[0]); /* call the computational routine */ createTRR(x,n,nor); } 

如果我尝试使用mex myfilename.c在matlab中编译它,我会收到以下错误:

  1. 错误C2143:语法错误:缺少’;’ 在’type’之前(在这一行: double *x;
  2. 错误C2065:’x’:未声明的标识符(在此行x = mxGetPr(plhs[0]); )和
  3. 错误C2065:’x’:未声明的标识符(在此行createTRR(x,n,nor);

我没有看到什么是错的,我也不明白为什么没有错误被抛出*也不只是为了* x。 我在ubuntu上用Matlab2012编写了代码并且它工作正常。 现在我正在使用Win7上的Matlab 2013b和Microsoft软件开发工具包(SDK)7.1作为C ++编译器。

你的代码是C ++,而不是严格的c:你在函数代码开始声明变量x 。 您可能还记得在C中,您必须在函数代码之前声明所有局部变量。

将您的文件扩展名改为cpp并重新使用它。

当编译为ANSI C代码时,您无法在代码之后声明变量。 您可以像Shai建议并重命名为.cpp一样,或者您可以单独保留文件名并启用C99标准 ,该标准允许在代码中声明:

 mex -v -largeArrayDims CFLAGS="\$CFLAGS -std=C99" file.c 

这也允许在文件中使用C ++样式注释(即// C++-style comment )。

另请参阅为什么在C99之前混合声明和代码被禁止? 。