2009-09-21 2 views
1

의 ObservableCollection에 상속 방법 : 오류 C2039 : 'ObservableCollection에를'시스템 :: 컬렉션 '의 구성원이 아닌 :: objectModel를 '내가 오류 얻을 ObservableCollection에 상속 관리 C++에서 클래스를 만들려고 할 때 관리되는 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

0

정확히 같은 문제가있었습니다. VS2010. WindowsBase.dll에 대한 참조가 있지만 오류가 발생했습니다. ObservableCollection을 사용하는 동일한 솔루션에 C# 프로젝트가 있으며 잘 컴파일됩니다. 결국 대상 .NET Framework를 V3.5 (MMC 프로젝트 및 MMC는 아직 .NET 4.0을 지원하지 않음)로 설정했다는 사실과 관련이 있다는 것을 알아 냈습니다. 나는 ".NET V3.5 Client"를 사용하기 위해 C# 프로젝트를 설정했지만 관리되는 C++ 프로젝트는 단순히 ".NET V3.5"로 설정되었습니다. ObservableCollection 정의는 WindowsBase.dll의 "클라이언트"버전에서 찾을 수 있지만 일반 버전에서는 찾을 수없는 것으로 보입니다.

다른 방식으로 설명하면 .csproj 파일에는 다음 줄이 있지만 .vcproj 파일에는 없습니다. "클라이언트"는 DLL을 지정

<TargetFrameworkProfile>Client</TargetFrameworkProfile> 

온다에서 :

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

"클라이언트"지정된 DLL은에서 제공되지 않는 경우 : "TargetFrameworkProfile"태그를 추가

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

.vcproj에 컴파일러가 클라이언트 버전의 WindowsBase.dll을 사용하도록 강제하고 컴파일이 성공하게됩니다. 이유를 설명 할 수는 없지만,이 머리를 내 뒤에 놓아두면 기쁩니다.

관련 문제