Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.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
如何设置填充了mxSetData的mxArray的classID? 我试图使用 MEX .H./Cuth>标头将我编写的C++程序转换成MATLAB命令,但不知道它们的MxRealStult是如何工作的。_C++_Matlab_Mex - Fatal编程技术网

如何设置填充了mxSetData的mxArray的classID? 我试图使用 MEX .H./Cuth>标头将我编写的C++程序转换成MATLAB命令,但不知道它们的MxRealStult是如何工作的。

如何设置填充了mxSetData的mxArray的classID? 我试图使用 MEX .H./Cuth>标头将我编写的C++程序转换成MATLAB命令,但不知道它们的MxRealStult是如何工作的。,c++,matlab,mex,C++,Matlab,Mex,假设我有一个名为data的std::vector,我想把它转换成一个mxArray,我可以返回到matlab,我必须这样做,对吗 mxSetData(plhs[0], static_cast<void*>(&(*(data.begin())))); mxSetN(plhs[0], data.size()); mxSetM(plhs[0], 1); mxSetData(plhs[0],静态_cast(&(*(data.begin()))); mxSetN(plhs[0],da

假设我有一个名为
data
std::vector
,我想把它转换成一个mxArray,我可以返回到matlab,我必须这样做,对吗

mxSetData(plhs[0], static_cast<void*>(&(*(data.begin()))));
mxSetN(plhs[0], data.size());
mxSetM(plhs[0], 1);
mxSetData(plhs[0],静态_cast(&(*(data.begin())));
mxSetN(plhs[0],data.size());
mxSetM(plhs[0],1);

但是matlab怎么知道我要发送的
mxArray
mxClassID
mxSINGLE_类
?为什么我不应该对双重数据使用
mxSetData
?为什么mxSetClassID不存在?

似乎需要将dfine
plhs[0]
作为
float
类型进行预处理,然后设置指针

plhs[0] = mxCreateNumericMatrix( 1, data.size(), mxSINGLE_CLASS, mxREAL );
void* oldAllocation = mxGetData( plhs[0] ); // for de-allocation
mxSetData(plhs[0], static_cast<void*>(&(*(data.begin()))));
mxFree( oldAllocation );

好的,首先谢谢你的回答。我确信数据将被释放事实上我没有使用向量,我按照帮助中的建议使用mexMalloc分配了指针。我必须说,你的解决方案在我看来非常不合逻辑,因为你需要分配两倍的内存(可能创建一个小矩阵不起作用?…无论如何,这仍然很难看)@matovitch那么为什么不使用
mxCreateNumericMatrix
直接设置
plhs[0]
来分配指针呢?这是一个更好的选择……但我仍然想知道为什么他们没有提供类似
mxSetClassID
的想法?
plhs[0] = mxCreateNumericMatrix( 1, data.size(), mxSINGLE_CLASS, mxREAL );
float* dst = (float*)mxGetData( plhs[0] ); 
for ( int i = 0 ; i < data.size(); i++ ) {
    dst[i] = data[i];
}
// or use memcpy instead of the loop