托管 C++ 中的字符串数组

发布于 2024-07-24 15:42:30 字数 231 浏览 6 评论 0原文

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

字符串^ linet[];

抛出错误

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

所以我想对于托管数据类型有不同的方法来执行此操作。 到底是什么?

I'm trying to write an application in Managed C++, but I cannot work out how to declare an array of strings.

String^ linet[];

throws an error

'System::String ^' : a native array cannot contain this managed type

So I suppose there's a different way to do this for managed data types. What exactly is it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

南城追梦 2024-07-31 15:42:31

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

假设您实际上使用的是 C++/CLI(由于您发布的错误消息),有两种方法可以执行此操作:

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

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

gcroot<String^>[] unmanagedArray;

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

Do you really mean Managed C++? Not C++/CLI?

Assuming you're actually using C++/CLI (because of the error message you posted), there are two ways to do this:

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

will create a managed array, i.e. the same type as string[] in C#.

gcroot<String^>[] unmanagedArray;

will create an unmanaged C++ array (I've never actually tried this with arrays - it works well with stl containers, so it should work here, too).

等数载,海棠开 2024-07-31 15:42:31

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

这应该有您需要的所有答案:)

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

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

That should have all the answers you need :)

When working with Managed C++ (aka. C++/CLI aka. C++/CLR) you need to consider your variable types in everything you do. Any "managed" type (basically, everything that derives from System::Object) can only be used in a managed context. A standard C++ array basically creates a fixed-size memory-block on the heap, with sizeof(type) x NumberOfItems bytes, and then iterates through this. A managed type can not be guarenteed to stay the same place on the heap as it originally was, which is why you can't do that :)

半衾梦 2024-07-31 15:42:31

您使用 .Net 中的集合类。 对于示例

List<String^>^ dinosaurs = gcnew List<String^>();

You use a collection class from .Net. For example:

List<String^>^ dinosaurs = gcnew List<String^>();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文