8

我正在尝试用托管 C++ 编写一个应用程序,但我无法弄清楚如何声明一个字符串数组。

字符串^ linet[];

抛出错误

'System::String ^' : 本机数组不能包含此托管类型

所以我想对于托管数据类型有不同的方法来做到这一点。它到底是什么?

4

3 回答 3

11

您真的是指托管 C++ 吗?不是 C++/CLI?

假设您实际上使用的是 C++/CLI(由于您发布的错误消息),有两种方法可以做到这一点:

array<String^>^ managedArray = gcnew array<String^>(10);

将创建一个托管数组,即与 C# 中的 string[] 类型相同。

gcroot<String^>[] unmanagedArray;

将创建一个非托管 C++ 数组(我从未真正尝试过使用数组进行此操作 - 它适用于 stl 容器,因此它也应该在这里工作)。

于 2009-06-15T10:44:11.793 回答
4

http://www.codeproject.com/KB/mcpp/cppcliarrays.aspx

那应该有你需要的所有答案:)

使用托管 C++(又名 C++/CLI 又名 C++/CLR)时,您需要在所做的每一件事中考虑变量类型。任何“托管”类型(基本上,从 System::Object 派生的所有内容)都只能在托管上下文中使用。一个标准的 C++ 数组基本上在堆上创建一个固定大小的内存块,大小为 (type) x NumberOfItems 个字节,然后遍历它。不能保证托管类型在堆上保持与原来相同的位置,这就是为什么你不能这样做:)

于 2009-06-15T10:45:31.633 回答
1

您使用 .Net 中的集合类。例如:_

List<String^>^ dinosaurs = gcnew List<String^>();
于 2009-06-15T10:46:09.980 回答