托管对象的二维数组c ++

时间:2014-03-02 15:47:10

标签: oop multidimensional-array c++-cli managed

我试图在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

但我得到'具有静态存储持续时间的变量不能有句柄或跟踪引用类型'

如何创建二维数组以添加六边形?

1 个答案:

答案 0 :(得分:4)

ref class 声明一个由垃圾收集器管理的类。 C ++ / CLI编译器应用于此类声明的一个强大限制是此类不能包含非托管对象。当压缩堆时移动对象时,这通常会变得很糟糕,使得非托管指针无法管理到这些非托管对象。

可能的麻烦制造者是Point类型,没有其他候选人。没有此问题的托管Point类型的示例声明是:

   public value struct Point {
       int x, y;
   };

或者使用带烘焙的System :: Drawing :: Point类型。