Domanda

Sto cercando di scrivere un'applicazione in Managed C ++, ma non riesco a capire come dichiarare un array di stringhe.

  

String ^ Linet [];

genera un errore

  

'System :: String ^': una matrice nativa non può contenere questo tipo gestito

Quindi suppongo che c'è un modo diverso di fare questo per i tipi di dati gestiti. Che cosa è esattamente?

È stato utile?

Soluzione

Vuoi davvero dire Managed C ++? Non C ++ / CLI?

Supponendo si sta usando C ++ / CLI (a causa del messaggio di errore che hai postato), ci sono due modi per farlo:

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

creerà un array gestito, cioè lo stesso tipo come stringa [] in C #.

gcroot<String^>[] unmanagedArray;

creerà una matrice non gestito C ++ (non ho mai provato questo con gli array - funziona bene con contenitori STL, così dovrebbe funzionare anche qui)

.

Altri suggerimenti

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

Questo dovrebbe avere tutte le risposte che cerchi:)

Quando si lavora con C ++ gestito (aka. C ++ / CLI aka. C ++ / CLR) è necessario considerare i tipi di variabili in tutto quello che fai. Qualsiasi tipo "gestito" (in pratica, tutto ciò che deriva da System :: Object) può essere utilizzato solo in un contesto gestito. Una matrice C ++ standard fondamentalmente crea una memoria blocco di dimensioni fisse sul mucchio, con sizeof (tipo) x NumberOfItems byte, e quindi scorre attraverso questo. Un tipo gestito non può essere garantito per rimanere nello stesso posto sul mucchio, come era in origine, motivo per cui non si può fare che:)

Si utilizza una classe di insieme da .Net. Per esempio :

List<String^>^ dinosaurs = gcnew List<String^>();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top