Struct 无法从';cli::阵列<;类型>^';至';cli::阵列<;类型>^';

Struct 无法从';cli::阵列<;类型>^';至';cli::阵列<;类型>^';,struct,c++-cli,Struct,C++ Cli,C++CLR,在VisualStudio2010(C++)中 我有这个结构: value struct Triangle{ static array<int>^ v = gcnew array<int>(3); static array<int>^ t = gcnew array<int>(3); static array<int>^ n = gcnew array<int>(3); }; 值结构三

C++CLR,在VisualStudio2010(C++)中

我有这个结构:

value struct Triangle{
    static array<int>^ v = gcnew array<int>(3);
    static array<int>^ t = gcnew array<int>(3);
    static array<int>^ n = gcnew array<int>(3);
};
值结构三角形{
静态数组^v=gc新数组(3);
静态数组^t=gc新数组(3);
静态数组^n=gc新数组(3);
};
我在课堂“私人”部分声明如下:

static array<Triangle^>^ triangles = gcnew array<Triangle>(MAX_POLYGONS);
静态数组^triangles=gcnew数组(最大多边形);
我得到这个错误,我不知道它意味着什么(因为它似乎自相矛盾):

错误C2440:“正在初始化”:无法从“cli::array^”转换为“cli::array^”
具有
[
类型=三角形
]

显然它不喜欢这个结构。我应该使用ref而不是value吗?这会产生很多指针。如果你能向正确的方向努力,我们将不胜感激。

你的发言中只需多加一顶帽子(^)。应改为:

static array<Triangle>^ triangles = gcnew array<Triangle>(MAX_POLYGONS); 
静态数组^triangles=gcnew数组(最大多边形);

您的声明中有一顶额外的帽子(^)。应改为:

static array<Triangle>^ triangles = gcnew array<Triangle>(MAX_POLYGONS); 
静态数组^triangles=gcnew数组(最大多边形);

无论如何,您的三角形结构包含3种引用类型。如果您担心堆上创建对象,以及如何影响垃圾回收器,请考虑使用另一个结构或通过直接声明9个整数来创建值类型。对于它的值,您的三角形结构包含3个引用类型。如果您担心堆上创建对象以及如何影响垃圾收集器,请考虑使用另一个结构或通过直接声明9个整数来创建值类型。好的,我修正了这个问题,并使用了戴夫的建议。但我现在有另一个问题,也许有人能帮我。我正在制作同一个“Model”类的两个实例,其中包含上面的三角形。每个实例都应该有自己的三角形。问题是,它们会改变彼此的数组。指针似乎指向同一个位置?我不确定这怎么可能。听起来像是另一个问题——最好用代码发布一个新问题。“static”关键字是解决这个问题的关键。一切都很好,谢谢你的帮助!事实上,对我来说,我必须同时使用两种帽子:数组^三角形。但我也从C生成的DLL中调用了一个方法来检索这些三角形。好吧,我修复了这个问题,并使用了Dave的建议。但我现在有另一个问题,也许有人能帮我。我正在制作同一个“Model”类的两个实例,其中包含上面的三角形。每个实例都应该有自己的三角形。问题是,它们会改变彼此的数组。指针似乎指向同一个位置?我不确定这怎么可能。听起来像是另一个问题——最好用代码发布一个新问题。“static”关键字是解决这个问题的关键。一切都很好,谢谢你的帮助!事实上,对我来说,我必须同时使用两种帽子:数组^三角形。但我也从C生成的DLL调用了一个方法来检索这些三角形。