我正在使用C++语言,当我尝试创建DataTable的简单对象时会遇到一个奇怪的错误,它给出了错误

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

即使我试过这个
System::Data::DataTable myDataTable = new DataTable();
收到以下错误请帮忙。

错误 C2750:“System::Data::DataTable”:无法在引用类型上使用“new”;改用'gcnew'
错误 C2440:“正在初始化”:无法从“System::Data::DataTable *”转换为“System::Data::DataTable ^”

最佳答案

您使用的语言称为 C++/CLI ,而不是普通的 C++。在 C++/CLI 中,您可以访问 .NET 内容,例如 DataTable 。语义与原始指针有点不同:

DataTable^ myDataTable = gcnew DataTable;

^ ”表示 managed handle 。在幕后,它是一个指向 GC 堆上的对象的指针。您不能对托管句柄进行指针运算。您不会手动对它们进行 delete。 GC将照顾他们。除非它们被明确固定,否则也可以自由移动对象。 gcnew 用于在托管堆上分配对象。它返回一个句柄,而不是一个原始指针。您不能使用 new 在非托管 C++ 堆上创建 .NET 引用类型。

关于ado.net - 不能在引用类型上使用 'new';改用 'gcnew' 吗?在 VS 2005 中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1327826/

10-14 02:35