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

时间:2014-03-06 21:21:08

标签: c++ 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);中)
  4. 我没有看到什么是错的,我也不明白为什么没有错误被抛出*也不只是为了* x。我在ubuntu上用Matlab2012编写了代码并且它有效。现在我正在使用Win7上的Matlab 2013b和Microsoft软件开发工具包(SDK)7.1作为C ++编译器。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

编译为ANSI C代码时,不能在代码后声明变量。您可以像Shai建议并重命名为.cpp,或者您可以单独保留文件名并启用C99 standard,它允许在代码中声明:

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

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

另见Why was mixing declarations and code forbidden up until C99?