2012-04-04 2 views
2

Windows Forms 프로젝트에서 using namespace을 활용하여 코딩 시간을 절약하려고합니다. VS2010의 C++/CLI를 사용하여 기본 Windows Forms 프로젝트를 만들었습니다.Windows Forms 응용 프로그램에서 C++/CLI를 사용하여 이름 공간 혼동

using namespace System; 
using namespace System::ComponentModel; 
using namespace System::Collections; 
using namespace System::Windows::Forms; 
using namespace System::Data; 
using namespace System::Drawing; 

내가 System::Windows::Forms 네임 스페이스 내부에 앉아 (! 편리 충분히)는 DialogResult -typed 변수를 만들려면 : 나는 수입 된 기본 네임 스페이스는 것을 알 수 있습니다. 나는 기본 Form1의 생성자에 가서 줄을 추가 :

DialogResult dr; 

나는 컴파일러 오류 syntax error : missing ';' before identifier 'dr'를 얻을 수 있습니다. 그러나

, 내가 줄을 변경하는 경우에 다음 중 하나를

Windows::Forms::DialogResult dr; 

또는

System::Windows::Forms::DialogResult dr; 

다음 모든 예상대로 작동합니다.

는 또한

Forms::DialogResult dr 

도 작동 후

using namespace System::Windows; 

을 추가하는 시도!

어떻게이 네임 스페이스가 작동하는지 어떻게 알 수 있습니까? 필자가 작성한 모든 코드를 완전히 한정하지 않아도되고 싶지만, 필요한 네임 스페이스가 이미 가져와 져야하므로 잘못되었다고 생각할 수 없습니다.

답변

4

System::Windows::Forms::FormDialogResult이라는 속성이 있으므로이 속성의 하위 클래스는 Form입니다.이 속성은 전역 이름 공간의 유형보다 우선 순위가 우선합니다.

typedef System::Windows::Forms::DialogResult DialogResult_t; 

그럼 언제든지 당신이 유형을 사용 DialogResult_t를 사용해야하고, 언제든지 당신은 DialogResult를 사용하여 속성에 액세스해야합니다

나는 보통 형식 정의로이 문제를 해결.

이 문제는 C++/CLI에 고유하지 않습니다. – C++의 범위 지정 규칙은 동일하므로 결과적으로 동일한 문제가 발생합니다. .NET BCL은 C#에이 문제가 없기 때문에 형식 이름을 속성 이름으로 매우 광범위하게 다시 사용합니다 (C++ 코드에서는이를 피할 수 있습니다).

+0

Grr! 나는이 것을 알아야했는데, 훌륭한 설명과 도움이되는 충고! 고마워요! – aardvarkk

관련 문제