无法返回泛型类型的cli数组

时间:2016-02-19 06:42:17

标签: c++-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 :: array&lt;转换ItemType,1&gt; ^'到'cli :: array&lt; ItemType,1&gt; ^'

ItemType是模板参数ie。

generic <typename ItemType>

我一直盯着这个,我无法发现故障。为什么不编译?

1 个答案:

答案 0 :(得分: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定义中。”