我想使用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