我想使用Matlab R2015b编译以下代码

#include "mex.h"
#include "GLTree.cpp"
/* the gateway function */
//la chiamata deve essere DeleteGLtree(Tree)

void mexFunction( int nlhs,const mxArray *plhs[],
    int nrhs, const mxArray *prhs[1]) {


//dichiarazione variabili
GLTREE* Tree;
double *ptrtree;



 if(nrhs!=1){ mexErrMsgTxt("Only one input supported.");}




ptrtree = mxGetPr(prhs[0]);//puntatore all'albero precedentemente fornito


Tree=(GLTREE*)((long)(ptrtree[0]));//ritrasformo il puntatore passato

if(Tree==NULL)
{ mexErrMsgTxt("Invalid tree pointer");
}


//chiamo il distruttore

 delete Tree;  }


但我收到此错误“ C:\ Users \ Admin \ Documents \ MATLAB \ GraphSeg \ GLtree3DMex \ DeleteGLTree.cpp:15:38:警告:从不同大小的整数强制转换为指针[-Wint-to-pointer-cast]
     Tree =(GLTREE *)((long)(ptrtree [0]));“

最佳答案

您错误地声明了mexFunction。您的声明:

void mexFunction( int nlhs,const mxArray *plhs[], int nrhs, const mxArray *prhs[1])


不等于:

void mexFunction( int nlhs,mxArray *plhs[], int nrhs, const mxArray *prhs[])


回答你的问题

您需要将const放在mxArray *plhs[]之前。

进一步的评论:

您可能想在将内存地址从mex函数传递回MATLAB时检查此链接。我的直觉是,您随意使用double并强制转换为long(甚至是long long)可能会遇到很大的问题……这确实应该是uin64,并且出于鲁棒性,您可能需要一些其他的编译检查,以确保类型全部匹配,因为一切都是8字节...
http://www.mathworks.com/matlabcentral/answers/75524-returning-and-passing-void-pointers-to-mex-functions

10-05 23:48