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

C++ c+上的奇怪错误+;matlab代码,c++,c,matlab,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]);

这是我代码的一部分:

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);
}
如果我尝试在matlab中用mex myfilename.c编译它,我会得到以下错误:

  • 错误C2143:语法错误:缺少“;”在“type”之前(此行中:
    double*x;
  • 错误C2065:“x”:未声明的标识符(在此行中
    x=mxGetPr(plhs[0]);
    ) 及
  • 错误C2065:“x”:未声明的标识符(在此行
    createTRR(x,n,nor);

  • 我看不出有什么不对,我也不明白为什么没有为*抛出错误,也没有为*抛出错误,而只是为*x抛出错误。我在ubuntu上用Matlab2012编写了代码,它成功了。现在我在Wi7上使用微软2013B,用微软软件开发工具包(SDK)7.1作为C++编译器。P> > P>你的代码是C++,而不是严格的C:在函数的代码开始后,你声明变量<代码> x< /代码>强> > >强>。您可能还记得,在C中,必须在函数代码之前声明所有局部变量


    将您的文件扩展名保存到cpp并将其重新转换。

    当编译为ANSI C代码时,您不能在代码后声明变量。您可以按照Shai的建议执行并重命名为.cpp,也可以不使用文件名而启用,这允许在代码中声明:

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

    这也允许在文件中使用C++风格的注释(即//C++风格注释< /C> >)。


    另请参见。

    声明的
    h
    nor
    sigma
    在哪里?@johnnymapp h和sigma声明为全局,请参见编辑的代码。nor在mexFunction的第一行中定义。自C99以来,C的声明与语句混合。可能他只是缺少正确的编译器标志。@JensGustedt没错,但是默认情况下,
    mex
    使用ANSI(C89/C90),而ANSI不支持它。我想您已经看到了,但是命令行修复在我的答案中。