2009-06-15 20 views
6

Próbuję napisać aplikację w zarządzanym C++, ale nie mogę się dowiedzieć, jak zadeklarować tablicę łańcuchów.Tablice łańcuchów w zarządzanym C++

String^linet [];

zgłasza błąd

„System :: String ^”: rodzimych tablica nie może zawierać ten zarządzany typ

więc przypuszczam istnieje inny sposób to zrobić za zarządzanie danymi typy. Co to dokładnie jest?

+0

tylko trochę: Podczas Zarządzane przyczepić C & C++ ++/interfejsu CLI wolę moją wiedzę należy do tej samej skompilowanego kodu, to faktycznie dwie różne są języki. –

Odpowiedz

7

Czy naprawdę masz na myśli Managed C++? Nie C++/CLI?

Zakładając jesteś rzeczywiście użyciu C++/CLI (z powodu komunikatu o błędzie pisał), istnieją dwa sposoby, aby to zrobić:

stworzy zarządzanego tablicę, czyli tego samego typu jak struny [] w języku C#.

gcroot<String^>[] unmanagedArray; 

stworzy niezarządzanego C++ tablicę (ja nigdy nie próbowałem tego z tablicami - to działa dobrze z kontenerów STL, więc powinien działać także tutaj).

+1

Jak to działa podczas wywoływania String-> Split() (tablica wersji łańcuchów)? –

+0

@ user645280 - array ^sa = str-> Split (gcnew array {"jeden", "dwa"}, StringSplitOptions :: None); Musisz określić StringSplitOptions podczas korzystania z napisów spit. – erict

4

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

To powinno mieć wszystkie potrzebne odpowiedzi :)

Podczas pracy z Managed C++ (aka. C++/CLI aka. C++/CLR) trzeba rozważyć swoje typy zmiennych we wszystkim, co zrobić. Dowolny typ "zarządzany" (w zasadzie wszystko, co pochodzi od System :: Object), może być używany tylko w zarządzanym kontekście. Standardowa tablica C++ w zasadzie tworzy blok pamięci o stałej wielkości na stercie, z sizeof (type) x NumberOfItems bytes, a następnie iteruje przez to. Zarządzany typ nie może zostać zachowany, aby pozostać w tym samym miejscu na stercie, jak pierwotnie był, dlatego nie można tego zrobić :)

+0

Tylko odrobina dziadka: Podczas gdy zarządzane C++ i C++/CLI będą według mojej wiedzy kompilowane do tego samego kodu, w rzeczywistości są to dwa odrębne języki. –

+0

From https://en.wikipedia.org/wiki/Managed_Extensions_for_C%2B%2B "... Te nowe rozszerzenia zostały oznaczone jako C++/CLI i zawarte w Microsoft Visual Studio 2005. [1] Termin Zarządzane C++ i jego rozszerzenia odnosi się do nich są więc przestarzałe i zastąpione przez nowe rozszerzenia .... "- Tak, tak, jesteś absolutnie poprawny. – cwap

+0

Wspomniałem tylko o tym, ponieważ Managed C++ nie używa uchwytów (zarządzanych wskaźników, zadeklarowanych jako 'type ^'), ale C++/CLI ma. ... Teraz, kiedy o tym myślę, osoba, która zadała to pytanie, również pomieszała te dwie osoby. –

1

Używasz klasy kolekcji z .Net. Do example:

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