2009-06-15 14 views
6

Estoy tratando de escribir una aplicación en C++ administrado, pero no puedo encontrar la forma de declarar una matriz de cadenas.Matrices de cadenas en Managed C++

Cadena^linet [];

genera un error

'Sistema :: string ^': una matriz nativa no puede contener este tipo administrado

así que supongo que hay una manera diferente de hacer esto para los datos gestionados tipos. ¿Qué es exactamente?

+0

Sólo un poco pequeña crítica: Mientras Managed C++ y C++/CLI que yo sepa ser compilado en el mismo código, que en realidad son dos idiomas distintos. –

Respuesta

7

¿Realmente quieres decir Managed C++? ¿No es C++/CLI?

Suponiendo que en realidad estás usando C++/CLI (a causa de la mensaje de error informados), hay dos maneras de hacer esto:

creará una matriz administrada, es decir, del mismo tipo que la cadena [] Cª#.

gcroot<String^>[] unmanagedArray; 

creará una matriz de C++ no administrado (en realidad nunca he intentado esto con matrices - que funciona bien con contenedores STL, por lo que debe trabajar aquí, también).

+1

¿Cómo funciona eso al llamar a String-> Split() (matriz de versión de cadenas)? –

+0

@ user645280 - array ^sa = str-> Split (gcnew array {"uno", "dos"}, StringSplitOptions :: None); Necesita especificar StringSplitOptions al usar spit strings. – erict

4

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

que deben tener todas las respuestas que necesita :)

Cuando se trabaja con C++ administrada (aka. C++/CLI aka. C++/CLR) debe tener en cuenta los tipos de variables en todo lo que hacer. Cualquier tipo "administrado" (básicamente, todo lo que se deriva de System :: Object) solo se puede usar en un contexto administrado. Una matriz C++ estándar básicamente crea un bloque de memoria de tamaño fijo en el montón, con sizeof (tipo) x NumberOfItems bytes, y luego itera a través de esto. No se puede garantizar que un tipo gestionado permanezca en el mismo lugar que originalmente, por lo que no puede hacer eso :)

+0

Solo un pequeño detalle: mientras que los Managed C++ y C++/CLI se compilarán en el mismo código, en realidad son dos idiomas distintos. –

+0

desde https://en.wikipedia.org/wiki/Managed_Extensions_for_C%2B%2B "... Estas nuevas extensiones se designaron C++/CLI e incluidas en Microsoft Visual Studio 2005. [1] El término Managed C++ y sus extensiones se refiere a que son obsoletas y reemplazadas por las nuevas extensiones ... "- Así que sí, tienes toda la razón. – cwap

+0

Solo lo mencioné porque Managed C++ no usa identificadores (punteros administrados, declarados como 'tipo ^'), pero C++/CLI sí lo hace. ... Ahora que lo pienso, la persona que hizo la pregunta también confundió a los dos. –

1

Utiliza una clase de colección de .Net. Para example:

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