2009-09-21 7 views
1

Lorsque j'essaie de créer une classe C++ héritée de ObservableCollection, j'obtiens l'erreur: error C2039: 'ObservableCollection': n'est pas un membre de 'System :: Collections :: ObjectModel »Comment hériter de ObservableCollection dans Managed C++

Voici mon code:

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^>^> {}; 

Pourquoi ne puis-je utiliser cette classe de C++ - CLI? Je n'ai aucune difficulté à l'utiliser en C#.

Répondre

3

Avez-vous veillé à ajouter une référence à WindowsBase.dll? ObservableCollection<T> réside dans cette DLL et n'est pas incluse dans la liste de références par défaut pour un projet C++.

+0

Lorsque j'ai essayé cela initialement, cela n'a pas fonctionné. Je pense que j'avais besoin de reconstruire le projet. Cependant, cela fonctionne maintenant bien, merci. – jumpalongjim

0

J'avais exactement le même problème; VS2010. J'avais une référence à WindowsBase.dll mais j'ai toujours l'erreur. J'ai un projet C# dans la même solution qui utilise ObservableCollection et il compile bien. J'ai finalement compris que c'était lié au fait que j'avais défini le framework .NET ciblé sur V3.5 (le projet MMC et MMC ne supporte pas encore .NET 4.0). J'avais défini le projet C# pour utiliser ".NET V3.5 Client" mais le projet C++ géré était simplement défini sur ".NET V3.5". Il semble que la définition ObservableCollection puisse être trouvée dans la version "client" de WindowsBase.dll mais pas dans la version normale.

En indiquant les choses différemment, le fichier .csproj contenait la ligne suivante mais pas le fichier .vcproj.

<TargetFrameworkProfile>Client</TargetFrameworkProfile> 

Lorsque "Client" est spécifié la DLL provient de:

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

Lorsque "Client" n'est pas spécifié la DLL provient de:

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

Ajout de la balise "TargetFrameworkProfile" au fichier .vcproj a forcé le compilateur à utiliser la version client de WindowsBase.dll et la compilation réussirait. Je ne peux pas expliquer pourquoi, mais je suis heureux de mettre ce gratte-tête derrière moi.