托管 C++ 中的字符串数组
我正在尝试用托管 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您真的是指托管 C++ 吗? 不是 C++/CLI?
假设您实际上使用的是 C++/CLI(由于您发布的错误消息),有两种方法可以执行此操作:
创建一个托管数组,即与 C# 中的 string[] 类型相同。
将创建一个非托管 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:
will create a managed array, i.e. the same type as string[] in C#.
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).
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 :)
您使用 .Net 中的集合类。 对于示例:
You use a collection class from .Net. For example: