2009-08-25 9 views
6

estoy usando un lenguaje C++ que estoy recibiendo un error extraño cuando estoy intento crear un simple objeto de DataTable su error dandono se puede usar 'nuevo' en el tipo de referencia; usar 'gcnew' en su lugar? en VS 2005

Sistema :: datos :: DataTable * myDataTable = new DataTable();

incluso lo intenté Sistema :: Datos :: DataTable myDataTable = new DataTable(); recibiendo el siguiente error, por favor ayuda.

error C2750: 'Sistema :: Datos :: DataTable': no ​​se puede usar 'nuevo' en el tipo de referencia; utilizar 'gcnew' en lugar error C2440: 'inicialización': no ​​se puede convertir de 'System :: Data :: DataTable *' a 'System :: Data :: DataTable^

Respuesta

11

El idioma que está utilizando se llama C++/CLI, no simple C++. En C++/CLI, puede acceder a cosas de .NET como DataTable. La semántica es un poco diferente de los punteros primas:

DataTable^ myDataTable = gcnew DataTable; 

"^" denota un managed handle. Debajo del capó, se trata de un puntero a un objeto en el montón de GC. No puede hacer aritmética de puntero en controladores administrados. Usted no los delete manualmente. El GC se encargará de ellos. También es libre de mover los objetos a menos que estén anclados explícitamente. gcnew se utiliza para asignar objetos en el montón administrado. Devuelve un identificador, no un puntero sin formato. No puede crear tipos de referencia .NET en un montón de C++ no administrado usando new.

+0

Impressive Mehrdad, Resolvió mi problema. Muchas gracias :) – Sachin

+0

+1 ¡Muy breve! –

Cuestiones relacionadas