![]() |
MATLAB和C / C ++。如何在不同的C / C ++规范之间进行选择
我使用Visual C ++ 2010的编译器(cl.exe)从[URL="http://www.mathworks.com/help/techdoc/ref/mex.html"]mex中[/URL] [URL="http://code.google.com/p/randomforest-matlab/"]的第三方库[/URL]编译C ++文件时遇到以下问题。
编译器在一条语句中多行抱怨,如下所示: plhs[i] = mxCreateNumericMatrix(nclass, 1, mxDOUBLE_CLASS, 0); 与: [INDENT]错误C2664:'mxCreateNumericMatrix_730':无法将参数4从'int'转换为'mxComplexity' [/INDENT]原因似乎是因为mxCreateNumericMatrix [URL="http://www.mathworks.com/help/techdoc/apiref/mxcreatenumericmatrix.html"]采用[/URL]枚举类型作为输入参数[B]4[/B] ,称为mxComplexity , [URL="http://www.mathworks.com/help/techdoc/apiref/mxcomplexity.html"]定义[/URL]为typedef enum mxComplexity {mxREAL=0, mxCOMPLEX}; 。换句话说,编译器抱怨它不能从[B]int[/B]隐式转换为[B]enum type[/B] 。 但是有趣的是,该[URL="http://code.google.com/p/randomforest-matlab/"]库[/URL]应该易于编译,而无需更改其中的任何内容。 因此,我的问题是:与其在发生这种情况的每一行中添加一个显式的[B]强制转换[/B] , [B]不如[/B]告诉[B]mex[/B] , [B]cl.exe[/B] (或[B]gcc[/B] ,如果我在Unix中这样做的话),我想执行一个[B]C式[/B]类型隐式转换? [B]注意1:[/B]不幸的是,我不知道该库是用什么C ++标准编写的。 [B]注2:[/B]如果有问题,这是我为[B]mex[/B]所进行的配置(在运行mex -setup之后默认由MATLAB进行设置): CompilerExecutable: 'cl' CompilerFlags: '/c /Zp8 /GR /W3 /EHs /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /nologo /MD' OptimizationFlags: '/O2 /Oy- /DNDEBUG' DebugFlags: '/Z7' LinkerExecutable: 'link' LinkerFlags: '/dll /export:%ENTRYPOINT% /LIBPATH:"%LIBLOC%" libmx.lib libmex.lib libmat.lib /MACHINE:X64 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /manifest /incremental:NO /implib:"%LIB_NAME%.x" /MAP:"%OUTDIR%%MEX_NAME%%MEX_EXT%.map"' LinkerOptimizationFlags: '' LinkerDebugFlags: '/debug /PDB:"%OUTDIR%%MEX_NAME%%MEX_EXT%.pdb"' [B]回答:[/B] 与C不同,C ++不允许从int到枚举值的隐式转换( [I]曾经[/I] !在C ++ 98、2003、0x中不可用),因此您需要对此类参数使用实际的枚举值。 或者,您也可以将其编译为C,因为他们编写的代码不是C ++(由于上述原因)。 [INDENT]注意1:不幸的是,我不知道该库是按照什么C ++标准编写的 [/INDENT]没关系,C ++标准是向后兼容的,并且此代码肯定没有在C ++ 0x中使用新功能,因此您的编译器很好。更改C ++编译模式将不允许您隐式进行上述转换。 [url=https://stackoverflow.com/questions/4845707]更多&回答...[/url] |
所有时间均为北京时间。现在的时间是 23:17。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.