2017-05-19 8 views
0

http://yaafe.sourceforge.net/manual/install.htmlからyaafeライブラリを使用しようとしました。すべてがインストールされ、正常に動作します。しかし、私はMATLABのインタフェースを使用したいと私は、次のコマンドmex yaafemex.cppを使用して提供yaafemex.cppをコンパイルしようとしたが、私はintitialコードを変更していないMATLABコードのmexのconst size_tの変換

Building with 'Xcode Clang++'. 
Error using mex 
/Users/TMAC/Documents/MATLAB/Add-Ons/Collections/Yaafe/yaafemex.cpp:107:22: error: no matching function for call 
to 'mxCreateNumericArray_730' 
     mxArray* featdata = mxCreateNumericArray(2,dims,mxDOUBLE_CLASS,mxREAL); 
          ^~~~~~~~~~~~~~~~~~~~ 
/Applications/MATLAB_R2017a.app/extern/include/matrix.h:1111:30: note: expanded from macro 'mxCreateNumericArray' 
#define mxCreateNumericArray mxCreateNumericArray_730 
          ^~~~~~~~~~~~~~~~~~~~~~~~ 
/Applications/MATLAB_R2017a.app/extern/include/matrix.h:782:1: note: candidate function not viable: no known conversion 
from 'int [2]' to 'const size_t *' (aka 'const unsigned long *') for 2nd argument 
mxCreateNumericArray_730(size_t ndim, const size_t *dims, mxClassID classid, mxComplexity flag); 
^ 
1 error generated. 

部分(上でこのエラーを持っていますyaafeライブラリ)

yaafemex.cpp

/* write data */ 
int dims[2] = {buf->info().size , buf->availableTokens()}; 
mxArray* featdata = mxCreateNumericArray(2,dims,mxDOUBLE_CLASS,mxREAL); //line 107 
double* featdataPtr = (double*) mxGetData(featdata); 
buf->read(featdataPtr,buf->availableTokens()); 
buf->consumeTokens(buf->availableTokens()); 
mxSetField(feat,0,"data",featdata); 

matrix.hによって提供さ

/* 
* Create a numeric array and initialize all its data elements to 0. 
* 
* Similar to mxCreateNumericMatrix, in a standalone application, 
* out-of-memory will mean a NULL pointer is returned. 
*/ 
LIBMMWMATRIX_PUBLISHED_API_EXTERN_C mxArray * 
mxCreateNumericArray_730(size_t ndim, const size_t *dims, mxClassID classid, mxComplexity flag); //line 782 
LIBMMWMATRIX_PUBLISHED_API_EXTERN_C mxArray * 
mxCreateNumericArray_700(int ndim, const int *dims, mxClassID classid, mxComplexity flag); 
+0

これは明らかにC++で、ないC.は、なぜCとPythonのタグをスパム? – Olaf

答えて

1
int dims[2] = {buf->info().size , buf->availableTokens()}; 

mxCreateNumericArrayは、符号なし数値型のconst size_t *が必要です。明示的に淡色をキャストするか、適切な種類の淡色を定義する必要があります。

次のように具体的に、私はyaafeに暗くなるの定義を編集したい:

size_t dims[2] = {static_cast<size_t>(buf->info().size) , static_cast<size_t>(buf->availableTokens())}; 
関連する問題