2012-07-27 53 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

相關問題