2012-07-27 52 views
1

C++ CLR,在Visual Studio 2010(C++)中。不能从'cli :: array <Type> ^'转换为'cli :: array <Type> ^'

我有这样的结构:

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); 
}; 

,我宣布在我的课的“私人”部分如下:

static array<Triangle^>^ triangles = gcnew array<Triangle>(MAX_POLYGONS); 

我得到这个错误,我不知道这意味着什么(因为它似乎自相矛盾):

error C2440: 'initializing' : cannot convert from 'cli::array<Type> ^' to 'cli::array<Type> ^' 
     with 
     [ 
      Type=Triangle 
     ] 

显然它不喜欢结构。我应该使用ref而不是value吗?这产生了很多指针。任何推入正确的方向将不胜感激。

+0

对于它的价值,您的Triangle结构包含3个引用类型。如果您担心在堆上创建对象以及您可能如何影响垃圾回收器,请考虑使用另一个结构或通过直接声明9个整数来创建值类型。 – 2012-07-28 01:37:25

回答

5

你的声明中只有一个额外的帽子(^)。它应该是:

static array<Triangle>^ triangles = gcnew array<Triangle>(MAX_POLYGONS); 
+0

好吧,我修正了这个问题,并且使用了Dave的建议。但我现在有另一个问题,也许有人可以帮忙。我正在制作两个同样的“模型”类的实例,其中我有上述的三角形。每个实例都应该有它自己的三角形。问题是,他们改变彼此的阵列。似乎指针指向同一位置?我不确定这是可能的。 – Mewa 2012-07-30 19:38:18

+0

听起来像另一个问题 - 最好用代码发布一个新问题。 – 2012-07-30 20:44:40

+0

“静态”关键字是解决该问题的关键。一切都很好,谢谢你的帮助! – Mewa 2012-08-09 17:07:35

相关问题