如何在C ++ / CLI中定义字符串数组?

时间:2012-05-11 06:08:58

标签: visual-studio-2010 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."
}

2 个答案:

答案 0 :(得分: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."
};

答案 1 :(得分:3)

另一个应答者具有正确的语法,但这不是因为你在数组初始化器中。

字符串初始化有两个错误。

  1. 使用gcnew时,您不需要包含^。你是 构造一个新对象,而不是一个新的引用。
  2. 调用构造函数时需要括号。
  3. 因此,正确的构造函数语法是调用gcnew String("Madam I'm Adam.")

    然而,正如其他回答者所指出的那样,你不需要这样做。字符串文字已经是一个String对象,因此您可以删除对构造函数的调用,并直接使用字符串文字。这与在C#中调用new String("Madam I'm Adam.")相同:它已经是一个字符串对象,调用new String是多余的。