2009-09-21 60 views
1

繼承當我嘗試從的ObservableCollection繼承託管C++創建一個類我得到的錯誤: 錯誤C2039:「的ObservableCollection」:是不是「系統::集合成員:: ObjectModel」如何從的ObservableCollection在託管C++

這裏是我的代碼:

using namespace System; 
using namespace System::Collections; 
using namespace System::Collections::Generic; 
using namespace System::Collections::ObjectModel; 

public ref class DataMatrix : public System::Collections::ObjectModel::ObservableCollection<array<Object^>^> {}; 

爲什麼我不能使用這個類在C++ - CLI?我沒有在C#中使用它的困難。

回答

3

您是否確定要添加對WindowsBase.dll的引用? ObservableCollection<T>住在這個DLL中,它不包含在C++項目的默認引用列表中。

+0

當我最初嘗試這個時,它不起作用。我想我需要重建項目。但是,它現在工作正常,謝謝。 – jumpalongjim 2009-09-21 22:11:24

0

我有完全相同的問題; VS2010。我有一個參考WindowsBase.dll,但我仍然有錯誤。我在一個使用ObservableCollection的解決方案中有一個C#項目,它編譯得很好。我最終發現這與我將有針對性的.NET框架設置爲V3.5(MMC項目和MMC尚不支持.NET 4.0)有關。我已經將C#項目設置爲使用「.NET V3.5 Client」,但託管的C++項目僅設置爲「.NET V3.5」。看起來,ObservableCollection定義可以在WindowsBase.dll的「客戶端」版本中找到,但不在常規版本中。

以不同的方式指出事情,.csproj文件包含以下行,但.vcproj沒有。

<TargetFrameworkProfile>Client</TargetFrameworkProfile> 

當 「客戶」 指定的DLL來自:

C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v3.5\Profile\Client 

當 「客戶」 未指定的DLL來自:

C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0 

添加 「TargetFrameworkProfile」 標籤到.vcproj強制編譯器使用客戶端版本的WindowsBase.dll,然後編譯將成功。我無法解釋爲什麼,但我很高興把這個頭部劃傷員放在我身後。