2009-08-25 1 views
6

Sto usando un linguaggio che sto ottenendo un errore strano quando mi provo a creare un semplice oggetto di DataTable relativo dare errorenon può usare "nuovo" sul tipo di riferimento; usa invece 'gcnew'? in VS 2005

System :: Data :: DataTable C++ * myDataTable = new DataTable();

anche io ho provato questo Sistema :: Dati :: DataTable myDataTable = new DataTable(); ottenendo il seguente errore, per favore aiuto.

errore C2750: 'Sistema :: Dati :: DataTable': impossibile utilizzare 'nuovo' sul tipo di riferimento; usare 'gcnew' invece errore C2440: 'inizializzazione': impossibile convertire da 'System :: Data :: DataTable *' a 'System :: Data :: DataTable^

risposta

11

La lingua in uso è chiamato C++/CLI, non semplice C++. In C++/CLI, è possibile accedere a materiale .NET come DataTable. La semantica è un po 'diverso da puntatori prime:

DataTable^ myDataTable = gcnew DataTable; 

"^" indica un managed handle. Sotto il cofano, è un puntatore a un oggetto sull'heap GC. Non è possibile eseguire l'aritmetica del puntatore sugli handle gestiti. Non li aggiungi a delete manualmente. Il GC si prenderà cura di loro. È anche libero di muovere gli oggetti a meno che non siano appuntati esplicitamente. gcnew viene utilizzato per allocare oggetti nell'heap gestito. Restituisce un handle, non un puntatore raw. Non è possibile creare tipi di riferimento .NET sull'heap C++ non gestito utilizzando new.

+0

Impressionante Mehrdad, ha risolto il mio problema. Grazie mille :) – Sachin

+0

+1 Molto succinta! –