从'int'无效转换为int * [-fpermissive]

时间:2015-10-22 13:00:10

标签: c++ matlab mex

之前我已实施此功能并且有效:

int *train_X = (int *)mxGetData(IN_a);// pointer to 6th argument matrix train_X 

for (int i = 0; i < 6; i++)
{
    for (int j = 0; j < 6; j++)
    {
        cout << train_X[6 * i + j] << endl;
    }
}

int sizeTrain_X1 = mxGetM(IN_a);
int sizeTrain_X2 = mxGetN(IN_a);

我甚至可以设法检查我是否使用以下内容获得了正确的尺寸,这一切都很好。

cout <<"Training input NumOfCollum:\n"<< sizeTrain_X1 << endl;
cout << "Training input NumOfRows:\n"<<sizeTrain_X2 << endl;

但是在使用以下初始化尝试我的整个程序时,我收到编译错误:

for (int epoch = 0; epoch<training_epochs; epoch++)
{
    for (int i = 0; i<train_S; i++)
    {
        rbm.contrastive_divergence(train_X[i], learning_rate, k);
    }
}

以下是错误消息:

  

RBM.cpp:在函数'void mexFunction(int,mxArray **,int,const   mxArray **)”:        RBM.cpp:570:64:错误:从'int'到'int *'的无效转换[-fpermissive]        RBM.cpp:81:6:错误:初始化'void RBM :: contrastive_divergence(int *,double,int)'[-fpermissive]的参数1        RBM.cpp:615:32:错误:数组下标的无效类型'int [int]'

1 个答案:

答案 0 :(得分:0)

train_Xint*。当您执行train_X[i]时,您现在获得了intcontrastive_divergence()虽然需要int*。由于您无法将int转换为int*,因此您会收到后续错误。您需要将train_X[i]的地址作为&train_X[i]传递,或者只是传递train_X