c++ - 从 'int' 到 int* [-fpermissive] 的无效转换

标签 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: In function ‘void mexFunction(int, mxArray**, int, const mxArray**)’: RBM.cpp:570:64: error: invalid conversion from ‘int’ to ‘int*’ [-fpermissive] RBM.cpp:81:6: error: initializing argument 1 of ‘void RBM::contrastive_divergence(int*, double, int)’ [-fpermissive] RBM.cpp:615:32: error: invalid types ‘int[int]’ for array subscript

最佳答案

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

关于c++ - 从 'int' 到 int* [-fpermissive] 的无效转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33281665/

相关文章:

c++ - OpenCV GPU 库使用

c++ - valgrind 报告 mysql_real_connect 泄漏

matlab - |Ubuntu 18.04, opencv-3.4.0, MATLAB/R2018a| make 因对 cv::dnn::eperimental 的 undefined reference 而失败

c - makefile 与 mex-project : `.rodata' can not be used when making a shared object

WCF mex 不包含来自主机的完整绑定(bind)信息

c++ - 模板中的默认参数 -> 模板参数涉及模板参数

c++ - typeid 和 type_info 类

matlab - nifti 文件中的 'originator' 标签是什么?

matlab - 在 Matlab 中调整绘图的大小,使图形不会被绘图窗口的边缘截断

java - 如何在 Mac 版本的 MatLab 中使用命令 xlswrite?