Borrar filtros
Borrar filtros

mxCreateNumericArray error: cannot convert from 'const size_t *' to 'const int *'

3 visualizaciones (últimos 30 días)
I am trying to compile a piece of downloaded code using Matlab 2017a on Windows 10:
// memory for HOG features
int out[3];
out[0] = max(blocks[0]-2, 0);
out[1] = max(blocks[1]-2, 0);
out[2] = 27+4+1;
mxArray *mxfeat = mxCreateNumericArray(3, out, mxDOUBLE_CLASS, mxREAL);
double *feat = (double *)mxGetPr(mxfeat);
Matlab keeps reporting error:
>> compile
compiling features.cc
Building with 'Microsoft Visual C++ 2015 Professional'.
Error using mex
features.cc
E:\...\HOG\ihog-master\internal\features.cc(47): error C2440: 'initializing': cannot convert from
'const size_t *' to 'const int *'
E:\...\HOG\ihog-master\internal\features.cc(47): note: Types pointed to are unrelated; conversion
requires reinterpret_cast, C-style cast or function-style cast
E:\...\HOG\ihog-master\internal\features.cc(67): error C2664: 'mxArray
*mxCreateNumericArray_730(std::size_t,const size_t *,mxClassID,mxComplexity)': cannot convert argument 2 from 'int [3]' to 'const
size_t *'
E:\...\HOG\ihog-master\internal\features.cc(67): note: Types pointed to are unrelated; conversion
requires reinterpret_cast, C-style cast or function-style cast
Error in compile (line 5)
mex -O internal/features.cc -output internal/features
I have followed a previous post to change int to mwSize, but got the same shorter error:
>> compile
compiling features.cc
Building with 'Microsoft Visual C++ 2015 Professional'.
Error using mex
features.cc
E:\...\HOG\ihog-master\internal\features.cc(47): error C2440: 'initializing': cannot convert from
'const size_t *' to 'const int *'
E:\...\HOG\ihog-master\internal\features.cc(47): note: Types pointed to are unrelated; conversion
requires reinterpret_cast, C-style cast or function-style cast
Error in compile (line 5)
mex -O internal/features.cc -output internal/features
>>
I have tried every means to change the type, but with no luck. Could you please give me some help to work around this? Thanks a lot!
  1 comentario
Jan
Jan el 27 de Feb. de 2018
@zzzhhh: "I have followed a previous post to change int to mwSize" does not explain clearly, what you have done. Please post the code.

Iniciar sesión para comentar.

Respuesta aceptada

Jan
Jan el 27 de Feb. de 2018
Editada: Jan el 27 de Feb. de 2018
According to the documentation, mxCreateNumericArray requires a const mwSize array as input for the dimensions:
mxArray *mxCreateNumericArray(mwSize ndim, const mwSize *dims,
mxClassID classid, mxComplexity ComplexFlag);
const mwSize out[3] = {max(blocks[0]-2, 0),
max(blocks[1]-2, 0),
27+4+1};
mxArray *mxfeat = mxCreateNumericArray(3, out, mxDOUBLE_CLASS, mxREAL);
UNTESTED I do not have access to a compiler currently.
  5 comentarios
Jan
Jan el 28 de Feb. de 2018
qzzzhhh: You are welcome. We had several equivalent threads here, where assumptions about int, mwSize and size_t let the compilation fail or even worse the code crash. In some cases I was convinced also, that an int should work, but after using mwSize and size_t the code worked reliably.
rui lu
rui lu el 28 de Feb. de 2018
Thank you so much, it's of great benefit to me!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre MATLAB Compiler en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by