我使用的是 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 堆上对象的指针。您不能对托管句柄进行指针算术。您不能手动删除
它们。 GC 会处理它们。除非明确固定对象,否则还可以自由移动对象。 gcnew
用于在托管堆上分配对象。它返回一个句柄,而不是原始指针。您无法使用 new
在非托管 C++ 堆上创建 .NET 引用类型。
关于ado.net - 不能在引用类型上使用 'new';使用 'gcnew' 代替?在VS 2005中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1327826/