gpt4 book ai didi

c# - 使用 C++/CLI 从泛型函数返回泛型列表

转载 作者:行者123 更新时间:2023-11-30 22:13:29 25 4
gpt4 key购买 nike

我正在尝试用 C++/CLI 编写一个通用函数,它将创建一个通用列表。列表的类型参数与泛型函数的类型相同。

C# 中,我只是这样做:

using System.Collections.Generic;

class MyClass
{
static List<T> CreateList<T>()
{
return new List<T>();
}
}

C++/CLI 中,我尝试做同样的事情,即

using namespace System::Collections::Generic;

generic <typename T>
List<T>^ MyClass::CreateList ( void )
{
return gcnew List< T >();
}

但我得到的只是一个编译错误:错误 C2371:“列表”:重新定义;不同的基本类型

我做错了什么?

注意:实际功能将做更多的事情,而不仅仅是创建一个列表,但这是我卡住的地方。

编辑:大家好,谢谢回复

显然我得到的错误具有误导性。我创建了一个仅包含(除了 main() )MyClass 的新解决方案,并得到了一个不同的错误。然后我尝试了 Hans Passant 的代码,它神奇地起作用了。再看一遍,我能看到的唯一区别是我完全限定了 List 类型即 System::Collections::Generic::List 而不是 List(但是为了清楚起见,我在之前的帖子中省略了它)。事实证明编译器出于某种原因不喜欢那样。即

using namespace System::Collections::Generic;

generic <typename T>
System::Collections::Generic::List<T>^ MyClass::CreateList()
{
//return gcnew System::Collections::Generic::List<T>; // this gives compile error
return gcnew List<T>; // this is all right
}

我不知道这是一个错误还是有什么原因...再次感谢您的帮助!

最佳答案

很难猜测该错误消息的来源。 “list”中的 L 没有大写,确保您不会在使用 std::list 模板类时遇到麻烦。确保该方法之前的先前类声明没有缺少分号。 Anyhoo,正确的代码应该是这样的:

类声明:

using namespace System::Collections::Generic;

ref class MyClass
{
public:
generic <typename T>
static List<T>^ CreateList();
}; // <== note semi-colon here.

方法定义:

generic <typename T>
List<T>^ MyClass::CreateList()
{
return gcnew List<T>;
}

关于c# - 使用 C++/CLI 从泛型函数返回泛型列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19135155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com