2016-02-19 132 views
0

的CLI數組我得到這個功能不能返回泛型類型

array<ItemType>^ GetNextItems(int n) { 
    auto ret = gcnew Collections::Generic::List <ItemType> ; 
    for (int i = 0; i < n; i++) { 
     auto item = GetNextItem(); 
     if (item == ItemType()) break; 
     ret->Add(item); 
    } 
    return ret->ToArray(); 
} 

但編譯給我一個錯誤:無法從轉換「cli的::陣列<的ItemType,1> ^」到「CLI: :array < ItemType,1> ^'

ItemType是一個模板參數,即。

generic <typename ItemType> 

我一直在盯着這一段時間,我無法檢測到故障。爲什麼不編譯?

+1

這很奇怪。你有沒有試過明確聲明'ret'爲'List ^'? – Medinoc

+1

我無法重現此錯誤。你能給出一個更完整的代碼示例,可能包含'GetNextItem()'和它們都在的類定義? –

回答

1

如果ItemType是一個.NET/CLR類型,那麼您將需要返回類型聲明中的^ -hat。 ^仍然是而不是包含在實際的類型聲明中。

因此,這將是這樣的:

generic <typename ItemType> 
ref class Test 
{ 
    array<ItemType ^>^ 
    GetNextItems(int n) 
    { 
     List<ItemType ^>^ret = gcnew List<ItemType ^>(n); 
     ... 
     return ret->ToArray(); 
    } 
}; 

通知的<ItemType ^>返回類型聲明中所添加的插入符號,而不是在類generic定義。

+0

解決了我在試圖創建數組列表時出現的問題:列表 ^>^myList有效。我正在嘗試沒有裏面的卡爾特。 – Bobsleigh