我试图在Windows窗体上创建一个六边形网格。
为此,我创建了一个带有头文件的'hexagon'类,如下所示:
ref class Hexagon
{
public:
Hexagon(int X, int Y, int I, int J);
Hexagon();
private:
array<Point>^ vertices;
Point Centre;
int i, j;
public:
int GetX();
int GetY();
void SetCentre(int X, int Y);
void CalculateVertices();
array<Point>^ GetVertices();
void drawHexagon();
};
然后,我想要一个存储这些六边形的二维数组。我这样做的尝试如下:
array<Hexagon^,2>^ Grid
但我得到'具有静态存储持续时间的变量不能有句柄或跟踪引用类型'
如何创建二维数组以添加六边形?
答案 0 :(得分:4)
ref class 声明一个由垃圾收集器管理的类。 C ++ / CLI编译器应用于此类声明的一个强大限制是此类不能包含非托管对象。当压缩堆时移动对象时,这通常会变得很糟糕,使得非托管指针无法管理到这些非托管对象。
可能的麻烦制造者是Point
类型,没有其他候选人。没有此问题的托管Point类型的示例声明是:
public value struct Point {
int x, y;
};
或者使用带烘焙的System :: Drawing :: Point类型。