我正在尝试将特征库用于我想在Matlab中制作成mex文件的c ++。我将代码分解为下面的基本要点。我需要制作一个返回向量,其长度对应于输入矩阵的行数。
使用下面的代码,我得到与编辑相对应的以下错误:
double y_OUT[nrow] = {};
我无法弄清楚为什么我不能分配长度为nrow的向量。 通过取消注释特定行并通过打印nrow我验证它实际上包含正确的数字。有没有人能给出任何指针(双关语)?
void mexFunction(
int nlhs,
mxArray *plhs[],
int nrhs,
const mxArray *prhs[]
)
{
double *x_IN;
int nrow,ncols;
/* Check for proper number of arguments */
//...
x_IN = mxGetPr(prhs[0]);
nrow = (int)mxGetM(prhs[0]);
ncols = (int)mxGetN(prhs[0]);
double y_OUT[nrow] = {};
MatrixXd x=Map<MatrixXd>(x_IN,nrow,ncols);
VectorXd Respons=VectorXd::Zero(nrow);
Map<VectorXd>(y_OUT,nrow)=Respons.array();
return;
}
答案 0 :(得分:6)
你没有在那里分配任何东西。第double y_OUT[nrow] = {};
行包含两个错误。如错误消息所述。
nrow
不是constexpr
。它无法在编译时进行评估。 0
元素,它也没有意义。动态分配的正确语法是:double* y_OUT = new double[nrow];
。我想这就是你想要的。您使用的语法double y_OUT[nrow]
用于静态分配,换句话说,必须在编译时知道数组的大小。
侧注:当然,您需要记住释放您预留的内存。这个问题与IMO =)
这个话题完全无关