Как наследовать от ObservableCollection в Managed C ++ - PullRequest
1 голос
/ 22 сентября 2009

Когда я пытаюсь создать класс в управляемом C ++, который наследуется от ObservableCollection, я получаю ошибку: ошибка C2039: «ObservableCollection»: не является членом «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 #.

Ответы [ 2 ]

3 голосов
/ 22 сентября 2009

Вы обязательно добавили ссылку на WindowsBase.dll? ObservableCollection<T> живет в этой DLL и не входит в список ссылок по умолчанию для проекта C ++.

0 голосов
/ 23 июля 2010

У меня была точно такая же проблема; VS2010. У меня была ссылка на WindowsBase.dll, но я все еще получил ошибку. У меня есть проект C # в том же решении, которое использует ObservableCollection, и он прекрасно компилируется. В конце концов я понял, что это связано с тем, что я установил целевую платформу .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, и тогда компиляция завершится успешно. Я не могу объяснить, почему, но я рад, что оставил позади себя этот скребок для головы.

...