1

ObservableCollection から継承するマネージ C++ でクラスを作成しようとすると、次のエラーが表示されます: error C2039: 'ObservableCollection' : is not a member of 'System::Collections::ObjectModel'

これが私のコードです:

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# での使用に問題はありません。

4

2 に答える 2

3

WindowsBase.dllへの参照を必ず追加しましたか? ObservableCollection<T>このDLLに存在し、C++プロジェクトのデフォルトの参照リストには含まれていません。

于 2009-09-21T21:25:18.103 に答える
0

私はまったく同じ問題を抱えていました。VS2010。WindowsBase.dll への参照がありましたが、それでもエラーが発生しました。ObservableCollection を使用する同じソリューションに C# プロジェクトがあり、正常にコンパイルされます。最終的に、対象の .NET フレームワークを V3.5 に設定したことが原因であることがわかりました (MMC プロジェクトと MMC はまだ .NET 4.0 をサポートしていません)。「.NET V3.5 クライアント」を使用するように C# プロジェクトを設定しましたが、マネージ 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 を使用するようになり、コンパイルは成功します。理由は説明できませんが、このヘッドスクラッチャーを後回しにしてよかったです。

于 2010-07-23T15:27:39.653 に答える