【问题标题】:c++ mex error: invalid types ‘double[mwSize]’ for array subscriptc ++ mex错误:数组下标的无效类型'double [mwSize]'
【发布时间】:2016-03-10 04:22:53
【问题描述】:

我知道以前有人问过类似的问题,但它们似乎围绕着常规的 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 文件的向量/数组。如果有人可以帮助我解决这个问题,我将不胜感激。谢谢!

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • Aaaa 还有我的新手错误!哈哈!感谢您抽出宝贵的时间。标记为已解决。
    猜你喜欢
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 2021-05-04
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多