我有一段代碼,類似於以下內容:雙變量定義2D CLI陣列長度失敗
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個雙變量。原來不行:
iTest1 = 1077149696
iTest2 = 0
這裏怎麼回事?編譯器或解釋器不能使用雙變量來存儲數組長度嗎?
其實它工作時,我有一維數組:
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);
C++/CLI的兩種基本生存策略。一個是何時知道要使用帽子^,int是一個值類型,不應該寫成int ^。另一種是如何知道對它提出問題,「沒有工作」是一個糟糕的問題描述。當然,數組具有整數個元素,1.5個元素沒有多大意義。編寫有意義的代碼並消除許多問題。 –