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编译它,我会得到以下错误:
double*x;
)x=mxGetPr(plhs[0]);
)
及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++风格的注释(即
另请参见。
h
、nor
和sigma
在哪里?@johnnymapp h和sigma声明为全局,请参见编辑的代码。nor在mexFunction的第一行中定义。自C99以来,C的声明与语句混合。可能他只是缺少正确的编译器标志。@JensGustedt没错,但是默认情况下,mex
使用ANSI(C89/C90),而ANSI不支持它。我想您已经看到了,但是命令行修复在我的答案中。