1

次のようなコードがありました。

  double dTest1, dTest2;
  int iTest1, iTest2;
  dTest1 = 15.0;
  dTest2 = 20.0;
  array<int^,2>^ arr2Test = gcnew array<int^,2>(dTest1, dTest2);
  iTest1 = arr2Test->GetLength(0);
  iTest2 = arr2Test->GetLength(1);

2D 配列の長さは可変で、長さ情報は 2 つの double 変数に格納されていました。うまくいかないことが判明しました:

  iTest1 = 1077149696
  iTest2 = 0

ここで何がうまくいかないのですか? コンパイラーまたはインタープリターは、配列の長さに double 変数を使用できませんか?

実際には、1D配列がある場合に機能します:

  array<int^>^ arrTest = gcnew array<int^>(dTest1);
  iTest1 = arrTest->GetLength(0);
  --> iTest1 = 15


上記の問題の解決策は、int への明示的なキャストです。これはとにかく行う必要がありますが、忘れることもできます (コンパイラの警告を気にしない場合)。

  array<int^,2>^ arr2Test = gcnew array<int^,2>((int)dTest1, (int)dTest2);
4

1 に答える 1