这是我的代码的一部分:
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中编译它,我会收到以下错误:
double *x;
)x = mxGetPr(plhs[0]);
中)
和createTRR(x,n,nor);
中)我没有看到什么是错的,我也不明白为什么没有错误被抛出*也不只是为了* x。我在ubuntu上用Matlab2012编写了代码并且它有效。现在我正在使用Win7上的Matlab 2013b和Microsoft软件开发工具包(SDK)7.1作为C ++编译器。
答案 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?。