2012-08-06 67 views
-1

實例我一直在使用C#.NET很長一段時間,最近我決定,這將是有益的,切換到C++/CLI。所以,我決定購買一個轉換器,並將我的一個大型項目轉換爲C++/CLI,我發現了一個非常好的轉換器,只有幾個BIG問題:類和C++/CLI

對於我在我的非靜態類C#項目中,每當代碼創建一個新的實例時,編譯器就會產生一個錯誤。 「缺少類型說明符 - int假定...」所有類的標題都是public ref class ClassName : BaseClassName 這也很混亂,因爲應該是靜態的類和不應該是靜態的類都是這樣命名的。

轉換器還留下評論在代碼,說這個地方: //C++ does not allow initialization of non-static fields in their declarations: 這些一直都在我原來的非靜態類之一,並始終遵循由 Type VariableNameType ^VaribleName

如此以來,很明顯,我不要不瞭解C++/CLI類如何工作,我的問題是:C#和C++/CLI中的動態類有什麼區別?我如何製作一個動態的C++/CLI類,並且我可能會做錯什麼?爲什麼C++中所有的類都是靜態的或者不是C#的前綴,在C++/CLI中都以「ref」爲前綴?另外,無論如何,這是否與在一個文件中擁有多個類有關?

如果您需要了解更多信息,請告訴我。

+0

你應該嘗試信任**任何**自動轉換器之前學習C++/CLI,因爲自動轉換工具不能很好地處理到C++的轉換。 – 2012-08-06 19:48:35

+0

想我可以通過繼續發展,但交換學習,這就是我從VB瞭解到C#,我已經明白這一點反正... – 2012-08-06 19:52:33

回答

1

您需要了解C++/CLI才能真正理解轉換器創建的代碼。

基本上,在C++/CLI中,ref class是一個C#樣式類。正常的class(不含ref)是一個本地C++類定義。

當從C#轉換時,所有C#類聲明將最終爲ref class,因爲它們是託管(.NET)類。

//C++ does not allow initialization of non-static fields in their declarations的評論是因爲你不能有一個在C++/CLI中定義它的內聯成員的類。例如,這個C#:

class Foo 
{ 
    private int test = 3; 
} 

那就需要使用構造函數被轉換爲C++/CLI:

ref class Foo 
{ 
private: 
    int test; 
public: 
    Foo() 
    { 
     test = 3; 
    } 
}; 
+0

哦,哈哈,我看到的評論字初始化,但它沒有處理在我腦海裏。我認爲這解決了我的一個問題。謝謝。 – 2012-08-06 19:55:05