我正在尝试将Eigen库用于C++,并将其制作成Matlab中的mex文件。我将代码分解为下面的要点。我需要制作一个返回 vector ,该 vector 的长度与输入矩阵的行数相对应。
在下面的代码中,我得到了与该行相对应的编译错误:double y_OUT[nrow] = {};
我不知道为什么我不能分配长度为nrow的 vector 。
通过取消注释特定行并打印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;
}
最佳答案
您没有在其中分配任何内容。 double y_OUT[nrow] = {};
行包含两个错误。如错误消息所述。
nrow
不是constexpr
。无法在编译时进行评估。 0
元素,这也没有意义。 动态分配的正确语法是:
double* y_OUT = new double[nrow];
。我认为这就是您想要的。您使用的double y_OUT[nrow]
语法用于静态分配,换句话说,必须在编译时知道数组的大小。旁注:当然,您需要记住释放您保留的内存。并且该问题与主题IMO =)完全无关
关于c++ - 在Matlab mex文件中使用 Eigen vector ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21751154/