2009-08-25 3 views
6

Ich verwende eine Sprache C++ Ich bin einen seltsamen Fehler bekommen, wenn ich ein einfaches Objekt von Datatable seiner geben Fehlerkann nicht 'neu' für den Referenztyp verwenden; benutze stattdessen "gcnew"? in VS 2005

System :: Data :: bin versuchen Datatable zu erstellen * MyDataTable = new Datatable();

auch ich habe versucht, diese System :: Data :: DataTable myDataTable = new DataTable(); bekommen den folgenden Fehler bitte helfen.

Fehler C2750: 'System :: Data :: DataTable': kann 'neu' für den Referenztyp nicht verwenden; verwenden 'gcnew' statt Fehler C2440: 'initialisieren': kann nicht aus konvertieren 'System :: Data :: Datatable *' auf ‚System :: Data :: Datatable^

Antwort

11

Die Sprache, die Sie C++/CLI genannt verwenden wird, nicht einfaches C++. In C++/CLI können Sie .NET-Sachen wie DataTable zugreifen. Die Semantik ist ein bisschen anders aus rohen Zeigern:

DataTable^ myDataTable = gcnew DataTable; 

"^" a managed handle bezeichnet. Unter der Haube ist es ein Zeiger auf ein Objekt auf dem GC-Heap. Sie können Zeigerarithmetik nicht auf verwalteten Handles ausführen. Sie tun dies nicht manuell delete. Der GC wird sich um sie kümmern. Es ist auch frei, die Objekte zu verschieben, wenn sie nicht explizit angeheftet sind. gcnew wird verwendet, um Objekte auf dem verwalteten Heap zuzuordnen. Es gibt ein Handle zurück, keinen rohen Zeiger. Sie können .NET-Referenztypen auf nicht verwaltetem C++ - Heap unter Verwendung von new nicht erstellen.

+0

Eindrucksvoller Mehrdad, löste es mein Problem. Vielen Dank :) – Sachin

+0

+1 Sehr knapp! –

Verwandte Themen