2011-08-15 61 views
1

我正在移植使用MS Visual Studio编写的代码。对于枚举MS Visual Studio允许用户指定这样的类型:将C++代码从MS Visual Studio移植到Linux并处理键入的枚举

enum SystemStatus:BYTE {OK = 0,NeedsAttention,Failed};

这里字节是无符号的字符

参考http://msdn.microsoft.com/en-us/library/2dzy4k6e.aspx

这会导致错误,当我试着和G ++ 4.1.2版附带的RedHat 5.6编译代码。显然,新的C++标准C++ 0x支持强类型枚举:http://en.wikipedia.org/wiki/C%2B%2B0x#Strongly_typed_enumerations

有没有简单的方法来解决这个问题,并获得代码移植?如果可能的话,我们希望代码能够在Windows和Linux中编译。这个项目中的枚举数是巨大的!谢谢。

+0

你必须使用这样一个旧的编译器吗? GCC 4.6.1在C++ 0x模式下接受这个。从源代码构建编译器也非常简单。 –

+0

语法对于枚举非常简单,因此您可以使用图案化搜索和替换来处理源代码文件。 – QuentinUK

+0

我可以移动到GCC 4.4的RHEL 6(或CentOS 6),那会有诀窍吗? –

回答

1

您正在使用的g ++版本不支持C++ 11功能,例如扩展枚举。从源代码编译最新的g ++,有一个helper script下载gcc依赖关系并为您构建。

+0

嗯,但如今的C++ ABI兼容性如何?你可以将用4.6编译的C++代码和用4.1编译的系统库链接起来吗?当然,如果他使用的所有支持库都是C,那就不是问题。 – Torp

+0

4.6应与从3.4开始的版本兼容。 http://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html并未更新至包含4.6。 –

+0

我升级到CentOS6,并解决了这个问题后,我为g ++编译器标志包括“-std = C++ 0x”。谢谢您的帮助。 –