c++ - MATLAB 和 C/C++。如何在不同的 C/C++ 规范之间进行选择

标签 c++ c visual-studio-2010 matlab g++

我在从 third-party library 编译 C++ 文件时遇到以下问题在 mex使用 Visual C++ 2010 的编译器 (cl.exe)。

编译器在多行中提示像下面这样的语句:

plhs[i] = mxCreateNumericMatrix(nclass, 1, mxDOUBLE_CLASS, 0);

与:

error C2664: 'mxCreateNumericMatrix_730' : cannot convert parameter 4 from 'int' to 'mxComplexity'

原因似乎是mxCreateNumericMatrix takes作为输入参数 4 的枚举类型,称为 mxComplexity,即 defined作为 typedef enum mxComplexity {mxREAL=0, mxCOMPLEX};。换句话说,编译器提示它无法从 int 隐式转换为 enum 类型

不过有趣的是,library in question应该可以轻松编译而无需更改其中的任何内容。

因此,我的问题是:不是在出现这种情况的每一行中都添加显式转换,而是有一种方法可以告诉 mexcl.exe(或 gcc,如果我在 Unix 中这样做),我想做一个 C 风格 类型隐式转换?

注意 1:不幸的是,我不知道该库是用什么 C++ 标准编写的。

注意 2: 以防万一,这是我对 mex 的配置(默认情况下由 MATLAB 设置,运行 mex -设置):

 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"'

最佳答案

C++ 不允许从 int 到枚举值的隐式转换(永远!不是在 C++98、2003、0x 中),与 C 不同,因此您需要使用实际的枚举值这样的参数。

或者您可以编译为 C,因为他们编写的代码不是 C++(由于上述原因)。

Note 1: Unfortunately, I don't know in what C++ standard the library was written

没关系,C++ 标准是向后兼容的,这段代码肯定没有使用 C++0x 中的新内容,所以您的编译器没问题。更改 C++ 编译模式将不允许您隐式执行上述转换。

关于c++ - MATLAB 和 C/C++。如何在不同的 C/C++ 规范之间进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4845707/

相关文章:

c - C 语言编程,Switch Case 问题

c - C代码溢出

c - 结构体中指针的大小

visual-studio-2010 - 隐藏 Visual Studio 功能工具栏

c - 如何用Visual Studio 2010开发C语言?

c++ - 有没有类似于Python中的C++中split()的东西?

c++ - 中缀到后缀算法

visual-studio-2010 - 从 Visual Studio 2008 转换的解决方案在 Visual Studio 2010 中的 Gacutil 后期构建步骤失败

c++ - line.find 不会编译,行未声明

c++ - 函数模板