2011-09-19 123 views
4

我做橋從.NET C++和使用收集作爲這樣的公共元素:gcroot系列 - 元素訪問

gcroot<System::Collections::ObjectModel::Collection<BModel::Device ^> ^> Devices; 

我使用gcroot因爲我的C++類沒有被管理(這是MFC )但我在訪問時遇到問題。當我做:

Devices[x]->devicename 

我有錯誤:

錯誤6錯誤C2676:二進制「[」:「gcroot」沒有定義這個 運算符或轉換到類型接受預定義 操作

所以我想我必須以某種方式,但不能訪問集合元素與此括號:[]

那麼如何訪問gcroot clr集合元素?

回答

7

當成員訪問運算符->超載時,看起來好像下標運算符[]不是,請首先拆開gcroot

using namespace System::Collections::ObjectModel; 
Collection<BModel::Device ^> ^d = Devices; 
d[0] //... this should work 

上述表示的隱式轉換(這就是爲什麼你不能使用auto)。如果您需要一行代碼,則可以使用static_cast

static_cast<Collection<BModel::Device ^> ^>(Devices)[0]; 
+0

謝謝。它以這種方式工作。 – Cynede