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

时间:2016-03-10 04:22:53

标签: c++ arrays matlab compiler-errors mex

我之前已经问过类似的问题,但它们似乎以常规c++代码为中心,而不是为创建c++文件而编写的mex代码。

由于这篇文章的标题有关,我收到以下错误:

  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文件的vectory /数组。如果有人可以帮助我,我真的很感激。谢谢!

1 个答案:

答案 0 :(得分:1)

您的电话号码似乎已关闭。它实际上抱怨tempdouble的下面一行,并且您尝试将其编入temp[k]