2009-10-13 177 views
2

您好我必須端口寫入第C一些東西++從UNIX立足操作系統窗口視覺工作室2008 下面的代碼實現數組數據類型與無效** - 指向數據的指針。移植C++從UNIX到Windows代碼


struct array 
{ 
    int id; 
    void **array; // store the actual data of the array 
    // more members 
} 

當我使用g ++在Unix它的確定,但是當我與2008年MSVS試試我得到的錯誤編譯 - 錯誤C2461:「陣」:構造函數的語法缺少正式的參數。當我將成員從'數組'更改爲其他作品時,所以編譯器認爲成員名'數組'實際上是結構數組的構造函數。將結構命名爲struct這樣的結構顯然不是一個好習慣,但它已經被這樣寫了。我可以告訴MSVS編譯器忽略這個問題,或者我應該重命名與結構名稱相同的所有成員。

+0

您是否必須使用Visual Studio的C++編譯器進行編譯?使用MinGW編譯Windows,並且您可以在不更改代碼的情況下進行編譯。 – 2009-10-13 17:38:02

+0

你想把它移植到* managed * C++嗎?如果可行,我建議移植到非託管C++。 – 2009-10-13 17:50:51

回答

5

您正在處理GCC編譯器中的錯誤。 C++語言明確禁止使用名稱與類名相同的數據成員(見9.2/13)。 MS編譯器是正確的抱怨它。而且,在這種情況下,任何C++編譯器都需要發出診斷消息。由於GCC即使在'-ansi -pedantic-Wall'模式下也是沉默的,這在GCC中是一個明顯的錯誤。

Revison:上面所說的只是在C++語言的「經典」C++ 98規範中才是正確的。在最近的規範中,此要求僅適用於靜態該類的數據成員。非靜態數據成員現在可以與類共享名稱。但我不知道這個改變是否已經在修訂標準的正式版本中。

這意味着,兩種編譯器都以自己的方式是正確的。 MS編譯器堅持使用該語言的「經典」C++ 98規範,而GCC似乎實現了更新的規範。

+0

如果是這樣的話,那麼他應該能夠用MinGW的編譯器進行編譯,因爲它是一個GCC港口。我希望它具有與GCC相同的行爲(包括越野行爲)。 – 2009-10-13 18:00:00

+0

它在C++ 2003中(第9.2/13節)。段落13a增加了一個要求,如果該類包含用戶聲明的ctor,則非靜態數據成員必須與類名稱具有不同的名稱。 – 2009-10-13 20:22:44

3

我會說,如果你正在做的事情,你自己形容爲「不是一個好的做法」,那麼你應該改變它。

+0

問題是,爲unix編寫的C++代碼不是從我寫的,我的工作只是在windows上移植它:) – 2009-10-14 05:58:18

2

我會重新命名你的屬性不具有相同的名稱作爲類。這將使你的代碼更加便攜。如果將來必須轉移到另一個編譯器,那麼您將不會再遇到這個問題。