Массивы строк в Managed C ++ - PullRequest
7 голосов
/ 15 июня 2009

Я пытаюсь написать приложение в Managed C ++, но не могу понять, как объявить массив строк.

Строка ^ linet [];

выдает ошибку

'System :: String ^': собственный массив не может содержать этот управляемый тип

Так что я полагаю, что есть другой способ сделать это для управляемых типов данных. Что именно это?

Ответы [ 3 ]

8 голосов
/ 15 июня 2009

Вы действительно имеете в виду Managed C ++? Не C ++ / CLI?

Предполагая, что вы на самом деле используете C ++ / CLI (из-за опубликованного вами сообщения об ошибке), есть два способа сделать это:

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

создаст управляемый массив, то есть того же типа, что и строка [] в C #.

gcroot<String^>[] unmanagedArray;

создаст неуправляемый массив C ++ (на самом деле я никогда не пробовал это с массивами - он хорошо работает с контейнерами stl, поэтому и здесь должен работать)

4 голосов
/ 15 июня 2009

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

Это должно иметь все ответы, которые вам нужны:)

При работе с Managed C ++ (он же C ++ / CLI или C ++ / CLR) вам нужно учитывать типы переменных во всем, что вы делаете. Любой «управляемый» тип (в основном, все, что происходит от System :: Object) может использоваться только в управляемом контексте. Стандартный массив C ++ в основном создает блок памяти фиксированного размера в куче с размером байтов sizeof (type) x NumberOfItems, а затем выполняет итерации. Управляемый тип не может гарантировать, что он останется в куче в том же месте, в каком он был изначально, поэтому вы не можете этого сделать:)

1 голос
/ 15 июня 2009

Вы используете класс коллекции из .Net. Для пример :

List<String^>^ dinosaurs = gcnew List<String^>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...