2012-05-11 47 views
3

什麼這個是錯的:如何在C++/CLI中定義一個字符串數組?

我得到這些錯誤所有5個定義:

error C3698: 'System::String ^' : cannot use this type as argument of 'gcnew' 
error C2512: 'System::String::String' : no appropriate default constructor available  



array<String^>^ arr = gcnew array<String^> 
{ 
    gcnew String^ "Madam I'm Adam.",  
    gcnew String^ "Don't cry for me,Marge and Tina.", //error C2143: syntax error : missing '}' before 'string' AND error C2143: syntax error : missing ';' before 'string' 
    gcnew String^ "Lid off a daffodil.", 
    gcnew String^ "Red lost Soldier.", 
    gcnew String^ "Cigar? Toss it in a can. It is so tragic." 
} 

回答

5

你不應該使用gcnew數組初始化中:

array<String^>^ arr = gcnew array<String^> { 
    "Madam I'm Adam.",  
    "Don't cry for me,Marge and Tina.", 
    "Lid off a daffodil.", 
    "Red lost Soldier.", 
    "Cigar? Toss it in a can. It is so tragic." 
}; 
3

其他回答者有正確的語法,但這不是因爲你在數組初始值設定項中。

你的字符串初始化有兩個錯誤。

  1. 當使用gcnew時,您不需要包含^。你是 構建一個新的對象,而不是一個新的參考。
  2. 調用構造函數時需要括號。

所以正確的構造函數的語法是調用gcnew String("Madam I'm Adam.")

但是,正如其他回答者指出的那樣,您不需要那樣做。字符串文字已經是一個String對象,所以你可以刪除對構造函數的調用,直接使用字符串文字。這與在C#中調用new String("Madam I'm Adam.")相同:它已經是一個字符串對象,調用new String是多餘的。

+0

這裏的構造函數是什麼,在C++/cli中?我知道在C++中它會在創建對象時調用,但是可以解釋它在這裏以及它的作用。 – Ghost

+0

構造函數在C++,C++/CLI和C#中具有相同的含義和功能。在所有情況下,在分配原始內存之後,由new/gcnew調用它來執行初始化。 –

+0

@David:實際上,構造函數在.NET和標準C++中的表現完全不同。它們具有相同的目的,但是在施工過程中虛擬調度等細節的運行方式卻非常不同。 –

相關問題