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

他の回答者の構文は正しいですが、配列初期化子を使用しているためではありません。

文字列の初期化には2つのエラーがあります。

  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 に答える