2009-08-25 9 views
6

Tôi đang sử dụng ngôn ngữ C++ Tôi đang gặp phải lỗi lạ khi tôi cố gắng tạo một đối tượng đơn giản của DataTable cho lỗi của nókhông thể sử dụng 'mới' trên loại tham chiếu; sử dụng 'gcnew' thay thế? trong VS 2005

Hệ thống :: Dữ liệu :: DataTable * myDataTable = new DataTable();

thậm chí tôi đã thử hệ thống này :: Dữ liệu :: DataTable myDataTable = new DataTable(); nhận được lỗi sau, xin vui lòng giúp đỡ.

lỗi C2750: 'Hệ thống :: Dữ liệu :: DataTable': không thể sử dụng 'mới' trên loại tham chiếu; sử dụng 'gcnew' thay lỗi C2440: 'khởi': không thể chuyển đổi từ 'Hệ thống :: Data :: DataTable *' thành 'Hệ thống :: Data :: DataTable^

Trả lời

11

Ngôn ngữ bạn đang sử dụng được gọi là C++/CLI, không plain C++. Trong C++/CLI, bạn có thể truy cập vào các công cụ .NET như DataTable. Ngữ nghĩa là một chút khác biệt so với con trỏ liệu:

DataTable^ myDataTable = gcnew DataTable; 

"^" biểu thị một managed handle. Dưới mui xe, nó là một con trỏ đến một đối tượng trên đống GC. Bạn không thể làm số học con trỏ trên tay cầm được quản lý. Bạn không tự delete chúng. GC sẽ chăm sóc chúng. Nó cũng miễn phí để di chuyển các đối tượng xung quanh, trừ khi chúng được ghim một cách rõ ràng. gcnew được sử dụng để phân bổ các đối tượng trên heap được quản lý. Nó trả về một xử lý, không phải là một con trỏ thô. Bạn không thể tạo các kiểu tham chiếu .NET trên vùng H ++ không được quản lý bằng cách sử dụng new.

+0

Ấn tượng Mehrdad, Nó đã giải quyết được vấn đề của tôi. Cảm ơn rất nhiều :) – Sachin

+0

+1 Rất ngắn gọn! –