mxCreateNumericArray error: cannot convert 'int*' to 'const size_t* {aka const long long unsigned int*}' for argument '2' to 'mxArray*
21 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Dick Oosthuizen
am 16 Mai 2019
Kommentiert: 晓航 邵
am 18 Mai 2022
I am trying to replicate the paper of Druedahl and Jorgensen (2017), with title "A general endogenous grid method for multi-dimensional models with non-convexities and constraints". However, I have an issue with the compiler in matlab, to read C++ files. More specifically, when I do in matlab:
mex cfuncs\mexUpperEnvelopeToCommon.cpp CXXFLAGS="$CXXFLAGS -fopenmp -std=c++11 -O3 -march=native -ffast-math -fabi-version=0 -mavx2" C:\TDM-GCC-64\lib\gcc\x86_64-w64-mingw32\5.1.0\libgomp.a;
I get the error:
error: cannot convert 'int*' to 'const
size_t* {aka const long long unsigned int*}' for argument '2' to 'mxArray* mxCreateNumericArray_730(size_t, const
size_t*, mxClassID, mxComplexity)'
plhs[iout] = mxCreateNumericArray(par->ndim,dims,mxLOGICAL_CLASS,mxREAL);
Also mex -DMX_COMPAT_32 cfuncs\mexUpperEnvelopeToCommon.cpp gives the same error.
I already tried to replace all int with mwSize. However, there are also two int* in the file, and I do not know how to replace those.
Does anyone know how to solve the issue? I attach the zip file with the C++ functions.
0 Kommentare
Akzeptierte Antwort
James Tursa
am 16 Mai 2019
Bearbeitet: James Tursa
am 16 Mai 2019
Simply replace this
int* dims = new int[par->ndim];
with this
mwSize* dims = new mwSize[par->ndim];
7 Kommentare
晓航 邵
am 18 Mai 2022
Do you finally use this kinof commamd "mex -compatibleArrayDims readTrackletsMex.cpp".
But why it does work in my situation? Could you tell me how to solve it?
errors still occurred like:
使用 'g++' 编译。
错误使用 mex
/home/shawn/Documents/MATLAB/StereoKittiSLAM/utilsRawData/readTrackletsMex.cpp: In function ‘void mexFunction(int, mxArray**, int, const
mxArray**)’:
/home/shawn/Documents/MATLAB/StereoKittiSLAM/utilsRawData/readTrackletsMex.cpp:76:82: warning: narrowing conversion of
‘tracklets->Tracklets::getTracklet(tracklet_idx)->Tracklets::tTracklet::poses.std::vector<Tracklets::tPose>::size()’ from
‘std::vector<Tracklets::tPose>::size_type {aka long unsigned int}’ to ‘int’ inside { } [-Wnarrowing]
const int poses_dim[] = {15, tracklets->getTracklet(tracklet_idx)->poses.size()};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
/home/shawn/Documents/MATLAB/StereoKittiSLAM/utilsRawData/readTrackletsMex.cpp:108:3: error: ‘cout’ was not declared in this scope
cout << "Found " << tracklets->numberOfTracklets() << " tracklets." << endl;
^~~~
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Write C Functions Callable from MATLAB (MEX Files) finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!