2012-10-04 82 views
0

我在函數中分配cli :: array時遇到了問題。函數中的數組分配

我有這種類型的對象:

array<double>^ tmsr2; 

現在我想在功能分配是這樣:

void allocate(array<double>^ tmsr2) 
{ 
    tmsr2=gcnew array<double>(100); 
} 

現在,tmsr2在功能上得到分配的很好,但返回時,我失去了指針到main() 問題很明顯,就像我想分配簡單數組「double * a」一樣;我需要傳遞指向函數的指針,所以「& a」,然後一切正常。我只是不知道託管數組的語法。非常感謝。

彼得

回答

1

由於array<double>是管理型,您可以在這裏使用一個管理跟蹤基準,而不是一個簡單的參考。

void allocate(array<double>^% tmsr2) 
{ 
    tmsr2 = gcnew array<double>(100); 
} 

這裏是我的測試程序:

public ref class AsAClassField 
{ 
public: 
    array<double>^ b; 

    AsAClassField() 
    { 
     allocate(b); 
     Debug::WriteLine("b = " + (b != nullptr ? "array" : "null")); 
    } 
}; 

int main(array<System::String ^> ^args) 
{ 
    array<double>^ a = nullptr; 
    allocate(a); 
    Debug::WriteLine("a = " + (a != nullptr ? "array" : "null")); 
    AsAClassField^ foo = gcnew AsAClassField(); 

    return 0; 
} 

輸出:

 
a = array 
b = array 

當然,你可以隨時切換你的分配函數返回新分配的數組,而不是以此爲參考。這將是更多的管理風格。

2

可以傳遞數組作爲參考:

void allocate(array<double>^ &tmsr2) 
{ 
    tmsr2=gcnew array<double>(100); 
} 
+0

感謝很多人,這工作完美 –

+0

okey,只是另一個問題,你的解決方案一般運行良好,但是當我聲明tmsr爲windows窗體公共變量並且想要在構造函數中分配它時,它會給出「不能轉換參數2從'cli :: array ^'到'cli :: array ^&「錯誤,任何消耗? –