2009-08-25 8 views
6

używam języka C++ Dostaję dziwny błąd, gdy ja staram się stworzyć prosty obiekt DataTable jego dając błądnie może używać "nowych" w typie odniesienia; zamiast tego użyj "gcnew"? w VS 2005

System :: Dane :: DataTable * myDataTable = new DataTable();

nawet próbowałem tego System :: Data :: DataTable myDataTable = new DataTable(); uzyskanie następującego błędu proszę o pomoc.

błąd C2750: "System :: Dane :: DataTable": nie można użyć "nowego" w typie odniesienia; użyć 'gcnew' zamiast błędu C2440: 'inicjowanie': nie można przekonwertować z 'System :: Dane :: DataTable *' do „System :: Dane :: DataTable^

Odpowiedz

11

Językiem używasz nazywa C++/CLI, nie zwykły C++. W C++/CLI można uzyskać dostęp do plików .NET, takich jak DataTable. Semantyka są nieco odmienne od surowych wskaźników:

DataTable^ myDataTable = gcnew DataTable; 

^” oznacza managed handle. Pod maską jest wskaźnikiem do obiektu na stercie GC. Nie można wykonywać arytmetyki wskaźników na uchwytach zarządzanych. Nie robisz tego ręcznie. GC się nimi zaopiekuje. Można również przesuwać obiekty, o ile nie są wyraźnie przypięte. gcnew służy do przydzielania obiektów na sterowanej stercie. Zwraca uchwyt, a nie surowy wskaźnik. Nie można tworzyć typów referencyjnych .NET na niezarządzanej sterty w C++ przy użyciu new.

+0

Imponujący Mehrdad, rozwiązał mój problem. Bardzo dziękuję :) – Sachin

+0

+1 Bardzo zwięzłe! –