2009-09-21 58 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,然后编译将成功。我无法解释为什么,但我很高兴把这个头部划伤员放在我身后。