Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Matlab R2015b 64位错误使用mex_C++_Matlab_Mex - Fatal编程技术网

C++ Matlab R2015b 64位错误使用mex

C++ Matlab R2015b 64位错误使用mex,c++,matlab,mex,C++,Matlab,Mex,我想使用Matlab R2015b编译以下代码” 但是我得到了这个错误“C:\Users\Admin\Documents\MATLAB\GraphSeg\GLtree3DMex\DeleteGLTree.cpp:15:38:警告:从不同大小的整数转换为指针[-Wint转换为指针] Tree=(GLTREE*)((long)(ptrtree[0]);“这是基于您的代码(我没有编译它)的猜测:在64位计算机上,地址空间有大小为8字节(64位)的指针,您可以将指针投射到类型long,该类型可能只有4字

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

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

这是基于您的代码(我没有编译它)的猜测:在64位计算机上,地址空间有大小为8字节(64位)的指针,您可以将指针投射到类型
long
,该类型可能只有4字节长。如果要投射,应使用8字节长的类型,例如
long
(保证至少有8个字节)

这是基于您的代码的猜测(我没有编译):在64位机器上,地址空间有大小为8个字节(64位)的指针,并将指针强制转换为类型
long
,该类型可能只有4个字节长。如果要强制转换,应使用8字节长的类型,例如
long
(保证至少有8个字节)

您错误地声明了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[])
回答你的问题 您需要在
mxArray*plhs[]
之前删除
const

进一步评论: 你可能想看看这个链接,看看如何将内存地址从一个mex函数传递回MATLAB。我的直觉是,你随意使用一个double和一个long(甚至一个long-long)这可能是非常有问题的…它真的应该是一个uin64,为了健壮性,您可能需要一些额外的编译检查,以确保所有类型都匹配,因为所有类型都是8字节。。。

您错误地声明了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[])
回答你的问题 您需要在
mxArray*plhs[]
之前删除
const

进一步评论: 你可能想看看这个链接,看看如何将内存地址从一个mex函数传递回MATLAB。我的直觉是,你随意使用一个double和一个long(甚至一个long-long)这可能是非常有问题的…它真的应该是一个uin64,为了健壮性,您可能需要一些额外的编译检查,以确保所有类型都匹配,因为所有类型都是8字节。。。

感谢您的回答,我使用“long-long”cast编译了代码,但这次出现了以下错误“使用'MinGW64编译器(C++')构建”。使用mex时出现错误无法导出mex函数:未定义符号collect2.exe:错误:ld返回1退出状态“至少在使用clang-700.1.81的Mac OS X上,long是8字节。我想在现代windows编译器上long也是8字节。@马尔默:这是一个链接错误。也许你的mexopts文件有错误的定义。根据这个错误很难判断。@MatthewGunn在我的系统上(visual studio 2013基于win 8.1 64位)long是4字节。这实际上取决于实现,并且
long
实际上只能保证其最小大小。感谢您的回答,我使用“long-long”强制转换编译了代码,但这次我遇到了以下错误“使用'MinGW64编译器(C++)构建”“.使用mex时出错无法导出mex函数:未定义符号collect2.exe:错误:ld返回1退出状态”至少在使用clang-700.1.81的Mac OS X上,long是8字节。我想在现代windows编译器上long也是8字节。@malmo:这是一个链接错误。也许你的mexopts文件有错误的定义。根据这个错误很难判断。@MatthewGunn在我的系统上(基于win 8.1 64位的visual studio 2013)long是4字节。这实际上取决于实现,并且
long
实际上只能保证它的最小大小。那么问题是什么呢?@EluciusFTW我如何使用Matlab R2015b 64位成功编译代码?那么问题是什么呢?@EluciusFTW我如何使用Matlab R2015b 64位成功编译代码?是的,你知道吗是的,非常感谢你的回答是的,你是对的,非常感谢你的回答