3

这有什么问题:

对于所有 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."
}
4

2 回答 2

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."
};
于 2012-05-11T06:14:02.260 回答
3

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

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

  1. 使用 gcnew 时,不需要包含^. 您正在构建一个新对象,而不是一个新引用。
  2. 调用构造函数时需要括号。

所以正确的构造函数语法是调用gcnew String("Madam I'm Adam.").

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

于 2012-05-11T12:30:27.017 回答