Gli array di stringhe in C ++ gestito
-
13-09-2019 - |
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?
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^>();