我刚刚进入托管c ++。我创建了一个名为Player的类,其类型是值。现在在这个类中我需要使用某种动态数组。我尝试过使用系统列表但视觉工作室给了我一个错误,我不能在值类中使用ref类。这个错误是什么?我可以使用什么?
using namespace System;
using namespace Collections;
using namespace Generic;
public value class Player
{
// other codes
List<int> MyItems // Gives error : Can not use ref class
// other codes
};
答案 0 :(得分:3)
这不是问题,值类可以包含任何引用类型引用。你不能做的是随意省略^ hat,成员必须是.NET要求的引用,因为对象总是在堆上分配。你得到的编译错误可能有点笨拙。编译好了:
public value class Player {
List<int>^ list; // Note: ^ required.
};
答案 1 :(得分:1)
在这种情况下,我认为你不需要在这里使用value
课程。如果您愿意,可以阅读它们(Value Class in C++/CLI,C++/CLI: Value Class Types)
相反,只需将Player
设为引用类型即可。这是大多数用户类应该是的。主要区别在于您使用gcnew
进行分配,垃圾收集器将进行清理。您还需要使用^
来表示参考。在您的代码中,List
成员缺少此内容。
public ref class Player
{
// other codes
List<int>^ MyItems;
// other codes
};
void use()
{
Player^ p = gcnew Player();
//use p, but make sure MyItems gets allocated with `gcnew`
//somewhere as well!
}