c++mex错误:数组下标的类型“double[mwSize]”无效

c++ mex error: invalid types ‘double[mwSize]’ for array subscript

本文关键字:double mwSize 无效 类型 错误 数组 下标 c++mex      更新时间:2023-10-16

我知道以前也问过类似的问题,但它们似乎围绕着常规的c++代码,而不是为创建mex文件而编写的c++代码。

正如这篇文章的标题所示,我得到了以下错误:

  gaussDraw.cpp:110: error: invalid types ‘double[mwSize]’ for array subscript
  mex: compile of ' "gaussDraw.cpp"' failed.

现在,我对c++编码还很陌生,但我想我很快就学会了。

以下是我的mexFunction和变量声明的声明。您会注意到我已经声明了double *x,它似乎是有问题的变量(当我到达line 110时,我们会看到(:

 void mexFunction(int nlhs, mxArray *plhs[],
    int nrhs, const mxArray *prhs[]){
           int i,j,numactiveid,count;
           mwSize p,n,k;
           double *newX, *stDev, *x, *c, *d, *l, *u, *tol, *y, *finallambda, *finallb, *finalub, *dd;
           int numVals,indexPos,numToDraw,curRandVal;
           double tempXVal,curStd, curMean,lambda,temp,lb,ub,tempDVal,xBarVal;
           int *activeId;

以下是我如何设置x:

// Get input values
p=mxGetM(prhs[0]); //get the size of the original x vector
x = mxGetPr(prhs[0]);//Original x vector

以下是违规代码块(我单独声明了每个值,以明确违规发生的位置,并添加了一条注释,显示对应于第110行(:

for(k=0;k<indexPos;++k){
        tempXVal = tempX[k];
        tempDVal = dd[k];
        xBarVal = x[k];//This is line 110
        temp[k] = xBarVal + (tempXVal *  tempDVal);
}

所以,我不确定为什么会出现这个错误。如果重要的话,x将是从matlab传递到[希望未来]mex文件的向量/数组。如果有人能帮我,我真的很感激。谢谢!

您的行号似乎不正确。它实际上是在抱怨下面的行,其中tempdouble,而您正试图将其索引为temp[k]