2011-08-15 94 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」。謝謝您的幫助。 –